被const宣告的變數一但被指定值,就不能再改變變數的值,您也無法對該變數如下取值:
const int var = 10;
var = 20; // error, assignment of read-only variable `var'
int *ptr = &var; // error, invalid conversion from `const int*' to `int*'
2.
用const宣告的變數,必須使用對應的const型態指標才可以:
const int var = 10;
const int *vptr = &var;
const int *vptr = &var;
同樣的vptr所指向的記憶體中的值一但指定,就不能再改變記憶體中的值,您不能如下試圖改變所指向記憶體中的資料:
*vptr = 20; // error, assignment of read-only location
3.
另外還有指標常數,也就是您一旦指定給指標值,就不能指定新的記憶體位址值給它,例如:
int x = 10;
int y = 20;
int* const vptr = &x;
vptr = &x; // error, assignment of read-only variable `vptr'
int y = 20;
int* const vptr = &x;
vptr = &x; // error, assignment of read-only variable `vptr'
4.
在某些情況下,您會想要改變唯讀區域的值,這時您可以使用const_cast改變指標的型態,例如:
void foo(const int* p) { int* v = const_cast<int*> (p); *v = 20; }
5.
陣列的動態配置
int *arr = new int[1000];
用完要delete,記得要加[]
delete [] arr;
6.
#include <iostream> using namespace std; int main() { char *str = "hello"; void *add = 0; add = str; cout << str << "\t" << add << endl; str = "world"; add = str; cout << str << "\t" << add << endl; return 0; }
執行結果:
hello 0x440000 world 0x440008 |
沒有留言:
張貼留言