數組的概念與指針的概念聯繫非常解密。其實數組的標識相當於它的第一個元素的地址,如:int a[5],數組名a指向它的第一個元素a[0]的地址。有語句如下:int a[5];int * p;下麵的賦值為合法的:p = a;這裡指針p 和a 是等價的,它們有相同的屬性,唯一的不同是我們可以給指針p賦其它...
數組的概念與指針的概念聯繫非常解密。其實數組的標識相當於它的第一個元素的地址,如:int a[5],數組名a指向它的第一個元素a[0]的地址。
有語句如下:
int a[5]; int * p; |
下麵的賦值為合法的:
p = a;
這裡指針p 和a 是等價的,它們有相同的屬性,唯一的不同是我們可以給指針p賦其它的數值,而a 總是指向被定義的5個整數組中的第一個。所以,p只是一個普通的指針變數,而與之不同,a 是一個指針常量(constant pointer),數組名的確是一個指針常量。因此雖然前面的賦值表達式是合法的,但下麵的不是:
a = p;
因為a 是一個數組(指針常量),常量標識不可以被賦其它數值。
由於變數的特性,以下例子中所有包含指針的表達式都是合法的:
#include <iostream> using namespace std; int main() { int a[5]; for(int n=0; n<5; n++) } |
輸出:10, 20, 30, 40, 50, |
括弧[]來指明我們要引用的數組元素的索引(index)。中括弧[]也叫位移(offset)操作符,它相當於在指針中的地址上加上括弧中的數字。
例如,下麵兩個表達式互相等價:
a[5] = 0; // a [offset of 5] = 0*(a+5) = 0; // pointed by (a+5) = 0
不管a 是一個指針還是一個數組名, 這兩個表達式都是合法的。