C++ 指針 vs 數(shù)組
指針和數(shù)組是密切相關(guān)的。事實(shí)上,指針和數(shù)組在很多情況下是可以互換的。例如,一個(gè)指向數(shù)組開(kāi)頭的指針,可以通過(guò)使用指針的算術(shù)運(yùn)算或數(shù)組索引來(lái)訪問(wèn)數(shù)組。請(qǐng)看下面的程序:
#include <iostream> using namespace std; const int MAX = 3; int main () { int var[MAX] = {10, 100, 200}; int *ptr; // 指針中的數(shù)組地址 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; // 移動(dòng)到下一個(gè)位置 ptr++; } return 0; }
當(dāng)上面的代碼被編譯和執(zhí)行時(shí),它會(huì)產(chǎn)生下列結(jié)果:
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
然而,指針和數(shù)組并不是完全互換的。例如,請(qǐng)看下面的程序:
#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; // 這是正確的語(yǔ)法 var++; // 這是不正確的 } return 0; }
把指針運(yùn)算符 * 應(yīng)用到 var 上是完全可以接受的,但修改 var 的值是非法的。這是因?yàn)?var 是一個(gè)指向數(shù)組開(kāi)頭的常量,不能作為左值。
由于一個(gè)數(shù)組名對(duì)應(yīng)一個(gè)指針常量,只要不改變數(shù)組的值,仍然可以用指針形式的表達(dá)式。例如,下面是一個(gè)有效的語(yǔ)句,把 var[2] 賦值為 500:
*(var + 2) = 500;
上面的語(yǔ)句是有效的,且能成功編譯,因?yàn)?var 未改變。
更多建議: