C++學(xué)習(xí)記錄01:數(shù)組指針
??? 最近起了學(xué)點(diǎn)編程的念頭,網(wǎng)上的教程看到數(shù)組指針的時(shí)候感覺有點(diǎn)繞,在此梳理一下筆記,難免會(huì)有錯(cuò)誤,僅供以后回顧。
??? 首先C中的數(shù)組、行、元素都可以籠統(tǒng)地當(dāng)成“元素”,每個(gè)元素都有“值”與“地址”兩個(gè)基本屬性,例如二維數(shù)組:
int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};

??? 其中a == &a[0] ,? a[0] == &a[0][0] , 除了a[0][0]這種里面放的是具體 int 值的,其余的都可以賦給指針,因?yàn)檎f到底里面放的都是地址,但是要注意指針的類型要與這些地址指向的數(shù)據(jù)類型相匹配。
??? 綜上二維數(shù)組有三種定義指針的思路:
??? 1.指針里裝行地址:
?? ? ?? int(*ph)[4] = a;
或者 int(*ph)[4] = &a[0];
??? 2.指針里裝元素地址
?? ? ?? int* py = a[0];
或者 int* py = &a[0][0];
??? 3.指針里裝整個(gè)數(shù)組的地址
????????int(*ps)[3][4] = &a;
嘗試使用上面的指針取出a[1][2]的值,按理應(yīng)該為7

三種思路都可以成功取出:

操作過程發(fā)現(xiàn)的值得注意的點(diǎn):
如果使用元素指針:給py 賦值a[0] 或者 &a[0][0]后 則指針只能在第一行偏移,無法通過偏移找到a[1][2], 需要一開始賦 a[1] 或者 &a[1][0] 。
到了元素層級(jí)不能使用下標(biāo)來偏移:b = *(ph[1] + 2)可以,b = *(ph[1][2])不行。c = *(py + 2)可以,c = *py[2]不行。
給指針賦值的時(shí)候貌似怎么偏移都不行,py = *(ph + 1)不行,py = ph[1]也不行。