C++指針VS數組
指針和數組是密切相關的。事實上,指針和數組在許多情況下是可互換的。例如,一個指針,指向一個數組的開頭可以通過使用指針運算或數組式的索引訪問數組。考慮下麵的程序:
#include <iostream> using namespace std; const int MAX = 3; int main () { int var[MAX] = {10, 100, 200}; int *ptr; // let us have array address in yiibaier. ptr = var; for (int i = 0; i < MAX; i++) { cout << "Address of var[" << i << "] = "; cout << ptr << endl; cout << "Value of var[" << i << "] = "; cout << *ptr << endl; // yiibai to the next location ptr++; } return 0; }
當上述代碼被編譯和執行時,它會產生產生一些如下:
Address of var[0] = 0xbfa088b0 Value of var[0] = 10 Address of var[1] = 0xbfa088b4 Value of var[1] = 100 Address of var[2] = 0xbfa088b8 Value of var[2] = 200
然而,指針和數組不能完全互換。例如,考慮下麵的程序:
#include <iostream> using namespace std; const int MAX = 3; int main () { int var[MAX] = {10, 100, 200}; for (int i = 0; i < MAX; i++) { *var = i; // This is a correct syntax var++; // This is incorrect. } return 0; }
這是完全可以接受應用指針運算符*設定為var,但它是非法的修改var值。這樣做的原因是,var是一個常數,它指向數組的開始,並且不能被用作為左值。
因為數組名生成一個指針常數,它仍然可以在指針式表達式中使用,隻要它不被修改。例如,下麵是指派var[2] 的值為500的有效語句:
*(var + 2) = 500;
上述聲明是有效的,並編譯成功,因為var不會改變。