C語言指標int p 4 如何理解?

時間 2021-12-26 04:15:42

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一點關係都沒有,都通過指標來控制顯示 交換...