p n ,指向多維陣列的指標運算基礎知識

2021-06-25 07:21:54 字數 654 閱讀 1284

#include

#include

#include

int main() ;

int *p,i,j;

p = a;

scanf("i=%d,j=%d",&i,&j);

printf("a[%d][%d] = %d\n",i,j,*(p+i*4+j));

return0; }

int main() ;

int (*p)[4],i,j;

p = a;

scanf("i=%d,j=%d",&i,&j);

printf("a[%d][%d] = %d\n",i,j,*(*(p+i)+j));

return0; }

*p做為指向單個元素的指標每次運算(如++)均以單個元素為單位,而(*p)[n]則是以n為基準(如++是一次指向多維中下一行,即位址增加n*sizeof(),第n+1個元素)。

在前定義(*p)[n]下,雖然*(p+i)和(p+i)在數值上是同一位址,當由於p指向多維陣列,讀取時有遞增或遞減趨勢,*(p+i)的++操作是列向自增,跨度為單個元素,(p+i)的++操作是行向自增,跨度為n個元素。

*p[n]共具有n個指標,如*p[i],p[n]為一位址型陣列,存放的均為位址;

(*p)[n]只有乙個指標p,指向多維陣列。

指向多維陣列的指標

為什麼指向多維陣列的指標要宣告除第一維外的所有下標大小呢?從編譯器的角度說是為了進行位址的運算 比如 你宣告了乙個int p,當你用p 1運算的時候,編譯器知道要給你的新位址加4 你宣告了乙個char p,當你用p 1運算的時候,編譯器知道要給你的新位址加1 同樣的道理,當你宣告了乙個指向多維陣列的...

指向指標的指標,指標的運算,指標與多維陣列的關係

指向指標的指標一顆 就有乙個位址 int p a int p1 p 變數的位址上的數值的位址 int a 10 int p a int p1 p 變數名而不是指標 巢狀的 列印得到的值是 p的值,列印得到的三個值都一樣 printf a p n a printf p p n p p是位址 p是取位址...

C語言指向多維陣列的指標

設有整型二維陣列a 3 4 如下 0 1 2 3 4 5 6 7 8 9 10 11 它的定義為 int a 3 4 設陣列a的首位址為1000,各下標變數的首位址及其值如圖所示。前面介紹過,c語言允許把乙個二維陣列分解為多個一維陣列來處理。因此陣列a可分解為三個一維陣列,即a 0 a 1 a 2 ...