2014年7月17日 星期四

指標與陣列

1.
被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;

同樣的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' 


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



沒有留言:

張貼留言