1樓:Dawson
我是這樣記的。
從左到右結合,沒有小括號的話,重點在陣列,因此是指標陣列,每個陣列元素都是指標。
有小括號的話,重點就是指標,因此是陣列指標。是乙個指向陣列首位址的指標。
2樓:路漫漫其修遠兮
int (*p)[4]; // p是指標,指向長度為4,元素型別為 int 的陣列
int *p[4]; // p是陣列,長度為4,元素型別為 int*
類似的,
int *p(int,int); // p是函式,返回型別為int*, 形參列表為(int,int)
int (*p)(int,int); //p 是指標,指向返回型別為int,形參列表為(int, int)的函式
指標很有用,函式不能返回陣列或者函式,但是可以返回陣列的指標或函式的指標。
int (*p(void))[4]; // p是函式; 形參列表為(void); 返回型別為指標,指向長度為4,元素型別為int的陣列;
3樓:嵌入式自我修養
首先這是乙個指標,因為小括號的優先順序最高
指標指向的型別是乙個陣列 int[4],陣列元素型別是int,長度為4
綜合:定義了乙個指向陣列的指標,指向的陣列元素型別為int,長度為4
4樓:Hippop
對於任何宣告:T expr,語法上這個式子一定成立:
T a = expr;
根據題主這個宣告,可以推導出int a = (*p)[4]語法成立。
所以,很明顯 p是指向擁有4個元素陣列的指標。
5樓:嵌入式Linux
*p首先就說明了p是乙個指標。
(*p)[4] 說明這個指標指向這個乙個有4個元素的陣列。
這個陣列是型別呢?int 表示出來了。#include
intmain
(),};
intb[4
]=;int(*
p)[4]
=b;printf
("%d\n"
,*((int*)
p+1));p=
a[1];
printf
("%d\n"
,*((int*)
p+1));
getchar
();return0;}
6樓:哈賀
int*p[4]因為 [ ] 比 * 的優先順序高,所以p先和[ ]結合,表示乙個陣列,然後再與*結合,表示int指標型別的陣列。(本質上是陣列,不過是int指標型別的陣列)這陣列裡每個元素都是int型別的指標,儲存的是int型別變數的位址。
而int(*p)[4],p先和*結合,表示p是乙個指標,int [4]就是他的型別,表示這是乙個陣列型別的指標,即p是乙個指向乙個長度為4陣列的指標,它的本質是乙個指標,這個指標的型別是int型別長度為4的陣列。表示,這個指標存的是int型別長度為4的陣列的位址。(不是其中某個元素的位址)
我們宣告了陣列型別的指標,這個指標存的是int型別長度為4的陣列的位址。
我們又宣告了乙個int型別的二維陣列行為2,列為4,並為其初始化,然後對這個指標p賦值,arr[0]表示第一行這個長度為4int型別的陣列的位址。
p[0]表示第一行陣列的位址,*p[0]表示位址對應的變數。
p[1]表示第二行陣列的位址。*p[1]表示位址對應的變數
c語言的變數和指標,怎麼理解?
zhonyong 自問自答 c語言的變數,比如如果有下面的語句 char c a 這裡定義了char型別的變數c,分配了乙個位元組的儲存空間,並且賦初值為 a 再來看 int a 這條語句定義了乙個沒有賦初值的int型變數a,在32位cpu上,即是分配了4個位元組的儲存空間。因為沒有賦初值,所以4個...
C語言的指標是不是像我理解的這樣?
C語言答疑課堂 對C語言指標的理解,一萬個人有一萬種理解法,題主的這個理解也是有道理的。我對C語言指標也有自己的理解,甭管是基本資料型別的指標,還是陣列指標,還是函式指標,還是結構體指標,都離不開兩個字 己他 說白了,我覺得只要理解了C語言指標的 己他 概念,你會發現C語言指標是個紙老虎!指標的 己...
C 語言宣告指標的時候 int p 到底是什麼意思?
這個回答挺到位的呢,剛剛看的,分享下 虛實道長 我憑感覺回答 1.反對譚浩強的教材誤導。c的優勢在於指標。乙個函式,有了指標,再也不用看返回值臉色了。不再受限於返回值。如果說函式的輸出來自於返回值,那你的函式原型得多複雜?介面得多易變?函式的返回值是void一點關係都沒有,都通過指標來控制顯示 交換...