被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 |
沒有留言:
張貼留言