1、一維數(shù)組:如定義int a[5];則a是包含5個元素的一維數(shù)組。現(xiàn)在我們討論一維數(shù)組的數(shù)組名a。記住下面幾點:
(1)a是數(shù)組名(一維數(shù)組的數(shù)組名)。
(2)a是一個假想的“指針變量”启泣。
(3)指針變量a所“保存”的值為數(shù)組的首地址,也即元素a[0]的地址示辈。
(4)指針變量a本身的地址(a所在內(nèi)存字節(jié)編號)是數(shù)組的地址寥茫,數(shù)值上與元素a[0]的地址相等。
(5)a值不可被改變矾麻,是常量纱耻。
注意:int ?*p;數(shù)組名a這個指針變量與p指針變量的不同之處在于,數(shù)組名a這個指針變量是“假想的”险耀,并不真實存在弄喘,而指針變量p是真實的變量。就因為是假想的甩牺,所以指針變量a的值是不可以被改變的蘑志。數(shù)組定義后,它的值就確定了贬派,它的值永遠為數(shù)組元素的首地址(即元素a[0]的地址)急但。它的值只能被獲取,而永遠不能被改變搞乏。
2波桩、兩個重要公式
數(shù)組名a是“指針變量”,具有指針變量的所有特性(只要不改變a值)请敦。指針變量加減整數(shù)運算镐躲。
a+0<=>&a[0]<=>a:為地址1000
a+1<=>&a[1]:為地址1004
a+2<=>&a[2]:為地址1008
。侍筛。萤皂。。
也就是:a+i<=>&a[i]
兩邊同時做*運算:
*(a+i)<=>a[i]
這兩個公式不僅適用于數(shù)組名勾笆,也適用于指針變量敌蚜,而且適用于所有類型的“指針變量”(包括二級指針乃至更高級別的指針變量)
c語言規(guī)定桥滨,對于數(shù)組元素的[]下標(biāo)的寫法:a[0]窝爪、a[1]弛车、a[2].....同樣適用于指針變量,如下所示:p[0]蒲每、p[1]纷跛、p[2].....
p是指針變量,卻也可以當(dāng)做“數(shù)組”來用邀杏。這種寫法是什么意思呢贫奠?以上公式同樣適用于p,因此p[0]<=>*(p+0)望蜡、p[1]<=>*(p+1)唤崭、p[2]<=>*(p+2)。如果p的值與a的值相等脖律,則p+i的值就與a+i的值相等谢肾,*(p+i)就與*(a+i)的值相等。而后者就等價于a[i].因此:p[0]就是a[0]小泉、p[1]就是a[1]芦疏、p[2]就是a[2]......
當(dāng)在程序中寫a[i]或p[i]的時候,c語言并不區(qū)分“[]”前的內(nèi)容究竟是數(shù)組名微姊、還是還是指針變量酸茴。在編譯是,它們都將被編譯系統(tǒng)變換為“*(a+i)”或“*(p+i)”的形式兢交,然后在執(zhí)行薪捍,因為后者才是它們的本來面貌。
3配喳、指針變量與一維數(shù)組名是等效的
要達到這種等效效果是有兩個前提條件的飘诗。
(1)指針變量p的值可以被改變,“指針變量”a的值永遠不能被改變界逛,在不改變a的值的前提下昆稿,p與a二者才能等效。
(2)p的值必須為數(shù)組 a的首地址息拜,也即元素a[0]的地址溉潭,也即等于a的值。一般須事先將指針變量p賦值為數(shù)組的首地址少欺,如執(zhí)行語句p=a;或p=&a[0]喳瓣;之后p與a才是等效的。
4赞别、間接訪問運算符與++畏陕、——誰更優(yōu)先?
間接訪問運算符*與++ --是同一優(yōu)先級額的仿滔,當(dāng)他們同時出現(xiàn)時惠毁,應(yīng)按照從右至左的順序計算:即先計算郵編的運算符犹芹,在計算左邊的運算符(有括號除外)。