轉(zhuǎn)自 https://www.cnblogs.com/hongcha717/archive/2010/10/24/1859780.html
一:數(shù)組指針(也稱行指針)
定義 int (*p)[n];
????()優(yōu)先級高,首先說明p是一個指針,指向一個整型的一維數(shù)組叹谁,這個一維數(shù)組的長度是n埋嵌,也可以說是p的步長。也就是說執(zhí)行p+1時佩迟,p要跨過n個整型數(shù)據(jù)的長度酬诀。
????如要將二維數(shù)組賦給一指針,應(yīng)這樣賦值:
????????????int a[3][4];
????????????int (*p)[4]; //該語句是定義一個數(shù)組指針有梆,指向含4個元素的一維數(shù)組。
????????????p=a;??????? //將該二維數(shù)組的首地址賦給p意系,也就是a[0]或&a[0][0]
????????????p++;?????? //該語句執(zhí)行過后泥耀,也就是p=p+1;p跨過行a[0][]指向了行a[1][]
????所以數(shù)組指針也稱指向一維數(shù)組的指針,亦稱行指針蛔添。
二:指針數(shù)組
定義 int *p[n];
????[]優(yōu)先級高痰催,先與p結(jié)合成為一個數(shù)組,再由int*說明這是一個整型指針數(shù)組迎瞧,它有n個指針類型的數(shù)組元素夸溶。
????這里執(zhí)行p+1是錯誤的,這樣賦值也是錯誤的:p=a凶硅;因為p是個不可知的表示缝裁,只存在p[0]、p[1]足绅、p[2]...p[n-1]捷绑,而且它們分別是指針變量可以用來存放變量地址。
????但可以這樣 *p=a; 這里*p表示指針數(shù)組第一個元素的值氢妈,a的首地址的值粹污。
????如要將二維數(shù)組賦給一指針數(shù)組:
????????????int *p[3];
????????????int a[3][4];
????????????for(i=0;i<3;i++)? ? ? p[i]=a[i];
????這里int *p[3] 表示一個一維數(shù)組內(nèi)存放著三個指針變量,分別是p[0]首量、p[1]壮吩、p[2],所以要分別賦值加缘。
三:總結(jié)
? 1. 數(shù)組指針只是一個指針變量鸭叙,似乎是C語言里專門用來指向二維數(shù)組的,它占有內(nèi)存中一個指針的存儲空間生百。
? 2. 指針數(shù)組是多個指針變量递雀,以數(shù)組形式存在內(nèi)存當中,占有多個指針的存儲空間蚀浆。
? 3. 同時用來指向二維數(shù)組時缀程,其引用和用數(shù)組名引用都是一樣的搜吧。比如要表示數(shù)組中 i 行 j 列 一個元素:
????????*(p[i]+j)、*(*(p+i)+j)杨凑、(*(p+i))[j]滤奈、p[i][j]
????優(yōu)先級:()>[]>*