和int a 4int p a有本質區別麼,intp

時間 2022-05-29 09:05:04

1樓:匿名使用者

有本質區別,

int (*p)[4]:p的型別是指向一個陣列的指標

int *p=a:p是一個指向整數的指標

初始化:

int (*p)[4] = &a;

要理解這個先要清楚指標的型別問題。記憶體地址儲存在任何型別的指標中都是一個數值而已,但指標變數本身是有型別的,可能兩個不同型別的指標變數的值是一樣的。

假設這裡p和q的值肯定是一樣的,但是指標指向的型別不同,p指向的是int,而q指向的是int[4]。型別對於指標的影響是指標運算的偏移量:假設p是一個指標,型別是t,那麼p+1的偏移量就是:

p的地址值+sizeof(t)。所以上面的例子裡,p+1偏移的是一個int的大小,而q+1偏移的是一個int[4]的大小,也就是4個int那麼大。

一般情況下陣列的指標多用於函式引數指向二維陣列,例如

int sum(int (*a)[10])

int main()

陣列傳遞給函式後會退化為指標:

int a[10]; 儲存int型別元素的陣列,退化為指向int型別的指標

int b[20][10]; 二維陣列其實是陣列的陣列,也就是儲存型別為陣列的陣列,退化為指向陣列型別(int[10]型別)的指標,也就是int (*p)[10];

2樓:

區分一下int* p[4]和int (*p)[4]

前者代表p是一個陣列,裡面裝的是int*型的指標;

後者相反,p是一個指標,指向一個int[4]的陣列。

所以歸根結底,這裡p是一個指標。那麼,我的理解是,*p列印出來是這個int[4]的首地址,而不是這個陣列裡面的值。而且,p+1的話,地址相當於以int[4]為單位增加,而不是以int為單位增加。

而,int *p=a這個例子,*p列印出來是a[0]裡的值,故而兩者應當是不同的。

如果是int* p[4], p=a的話,就會出現陣列p的首地址變成陣列a的首地址。而p[0] 就會變成a[0]的值,但是此時p[0]的型別為int* ,而a[0]為int,這時如果dereference這個p[0]的話,就會出現segementation fault.

歸根結底,無論int* p[4]還是int (*p)[4],都相當於二級指標,與a[4]這種一級指標肯定是不同的。

至於初始化,比較傷

&p是p自己的地址,已經不用管了,p是個地址,需要你來給出,*p也是地址,這個也需要你給出,**p才是數值。

指標這種東西,其實就沒什麼所謂的初始化,一開始都設為null,只有當確定有相對應的記憶體空間之後,才能去取地址使用。

比如有a[2][4],這個時候,p = &a[0][0]或許是可以的,但是p+2的時候,就不能保證是取到是什麼數值了。

總之,就記成,指向int[4]的一個指標就好了,而int[4]是個陣列型別(自己定義的),凡是陣列,其實都是一串地址。

3樓:仙戈雅

設有:int a[4]=;

int *p=a; // 這種形式是定義指標變數p後直接對其初始化讓它指向陣列a的首地址(即&a[0])

int (*p)[4]; // p是指向由4個整型元素的陣列(即p指向一維陣列)

p=&a;和p=a;都是對int (*p)[4];這種形式做初始化賦值工作。

4樓:

第一個是指標,指向的是有4個元素的陣列,是一個陣列指標(不是指標陣列)。

int a[4];int *p=a,把a的首地址賦值給p,p=a;

int main ()

;int (*pi)[4];

pi=a;

return 0;}

5樓:

第一個是陣列指標,陣列名a實際上不等同於指標,但是你可以傳遞給p地址

初始化可以用memset()函式。

c語言中 int*p[4] 和 int(*p)[4]的區別

6樓:天雲一號

int *p[4]; //定義一個指標陣列,該陣列中每個元素是一個指

針,每個指標指向**就需要程式中後續再定義了。

int (*p)[4]; //定義一個陣列指標,該指標指向含4個元素的一維陣列(陣列中每個元素是int型)。

區分int *p[n]; 和int (*p)[n]; 就要看運算子的優先順序了。

int *p[n]; 中,運算子[ ]優先順序高,先與p結合成為一個陣列,再由int*說明這是一個整型指標陣列。

int (*p)[n]; 中( )優先順序高,首先說明p是一個指標,指向一個整型的一維陣列。

7樓:匿名使用者

int*p[4]是指標的陣列,也就是說它是一個陣列,陣列裡存的是一個個的指標

int(*p)[4]是陣列的指標,也就是說它是一個指標,指向的是一個陣列。指標指向的型別會影響到指標加減運算時地址的位移。比如說有一個陣列 int a[4],加上取址運算子 &a,這個表示式的型別就是指向陣列的指標,可以這樣賦值 p = &a;。

一般用於向函式傳遞二維陣列的時候使用這種型別,這時還有一種更直觀的寫法

void matrix_sum(int matrix_a[4], int matrix_b[4])

這種寫法和

void matrix_sum(int (*matrix_a)[4], int (*matrix_b)[4])

是等價的。

8樓:

int* p[4] // 4個元素的

陣列,元素為int型別的指標

int (*p)[4] // p是一個指標,它指向 4個int型元素的陣列

int (&p)[4] // p是引用, 它引用 4個int型元素的陣列.

9樓:匿名使用者

int *p[4] 是一個存int* 的一維陣列

int (*p)[4] 是一個int 陣列 *p指向a[0]

c語言int (*p)[4]和int *p[4]區別 10

10樓:匿名使用者

int *p[4], 是一個長度為4的指標陣列,陣列的元素為int*;

sizeof(p) => 4*4 = 16;(32位系統一個指標4位元組)

用法:*(p[0])

int (*p)[4] 是一個指向長度為4陣列的指標,即int(*)[4];

其本質是一個指標,如在32為系統上,sizeof(p) => 4用法:(*p)[0].

11樓:一樹的果

第一個是指標陣列,第二個是陣列指標。區別是他是一個指標還是多個指標。

陣列指標只是一個指標變數,似乎是c語言裡專門用來指向二維陣列的,它佔有記憶體中一個指標的儲存空間。指標陣列是多個指標變數,以陣列形式存在記憶體當中,佔有多個指標的儲存空間。

int (*p)[4]就相當於int p[4],它就是一個二維陣列的指標,可以指向一個第二維度為4的二維陣列

(一道選擇題)有關於兩種定義int (*p)[4] 和 int *p[4]的意義和區別

12樓:匿名使用者

選bint (*p)[4]

定義襲了bai一個

指標p,指向一個4個元du素的數zhi組dao。只是定義一個指標,指向4個元素的陣列

int *p[4]

定義了一個陣列指標p[4],p的每個元素指向一個整型的資料。就是陣列裡面儲存的是指標。

13樓:烏龍踏雪

選b原題顯然是要定義一個指標陣列,用來存放地址,那麼就是選b了

b是定義了一個含有四個元素的指標陣列。

d則是定義了一個指向「一個含有四個元素的一維整形陣列」的指標變數。

14樓:匿名使用者

ba+j 是地址,p[j]是陣列元素,可知p為陣列指標b為陣列指標,裡面有4個地址;

d為二維陣列指標,4為二維陣列每行元素的個數從結合律可以看出來,* p先結合,指向一個地址,從該地址開始有4個元素

c語言問題!int *p[4]和int (*p)[4]有什麼區別?

15樓:匿名使用者

int *p[4],就bai

是p本質上是個陣列,du只不過陣列中的每個元素zhi都是指標

daoint (*p)[4],就是p本質上是個內指標,指標指向一個一維的數容組

這種題的話,其實可以先根據運算子的優先順序、結合性,先確定識別符號本質上是一個什麼,然後再去補充

例如,int *p[3],先根據優先順序,等效於*(p[3]),所以p本質上是一個有三個元素的陣列;那麼陣列的每個元素又是什麼呢?是一個指標;那指標指向的又是什麼呢?是指向一個int型的資料;所以整理一下就是p是一個有三個指向int資料的指標的陣列,本質上就是一個陣列

16樓:t君凡

int *p[4]是定義了一個四個元素的陣列,元素型別為int的指標

後一個是定義了一個int指標,指向記憶體中4個int大小一塊區域的首地址,以四個int單位

如p++,是移動4

17樓:匿名使用者

前者指標陣列,後者陣列指標

int (*p)[4]與 int *p的區別

18樓:匿名使用者

--du-------zhi-------dao----陣列arr[4] |

回 arr[0]| arr[1]|arr[2]| arr[3]|--答------------------若以int (*p)[4]作形參, 則(*p) == arr,即p相當於&arr;

用(*p)[0] 訪問 arr[0];

用(*p)[1] 訪問 arr[1];

而以int *p作形參,p == arr,*p則等於arr〔0〕;

用(*p)或者p[0] 訪問 arr[0];

用(*(p+1))或者p〔1〕 訪問 arr[1];

其實int(*p)〔4〕一般用於接收形如arr〔n〕〔4〕(n為正整數)的陣列,這個地方大材小用了

19樓:

後面的那個能用p的形式嗎

20樓:在秀梅欽念

int(*p)[4]為指向陣列的指標,即p為指向包含4個元素的一維陣列的指標變數;

int*p[4]

為指標陣列,定義指標陣列p,它由4個指向整型資料的指標元素組成;

c語言中 int*p[4] 和 int(*p)[4]的區別是什麼?

21樓:匿名使用者

int*p[4]是指標的陣列

,也就是說它

是一個陣列,陣列裡存的是一個個的指標

int(*p)[4]是陣列的指標,也就是說它是一個指標,指向的是一個陣列。指標指向的型別會影響到指標加減運算時地址的位移。比如說有一個陣列 int a[4],加上取址運算子 &a,這個表示式的型別就是指向陣列的指標,可以這樣賦值 p = &a;。

一般用於向函式傳遞二維陣列的時候使用這種型別,這時還有一種更直觀的寫法

void matrix_sum(int matrix_a[4], int matrix_b[4])

這種寫法和

void matrix_sum(int (*matrix_a)[4], int (*matrix_b)[4])

是等價的。

往生和死亡有什麼本質區別?往生和死有什麼區別

往生是人臨命終時,誠念阿彌陀佛,嚮往西方極樂世界,命終時被阿彌陀佛接引往生到極樂世界,清淨圓滿,永不六道輪迴 死亡 六道中輪迴,天道,人道,阿修羅道,畜生道,餓鬼道,地獄道 往生並不是死亡,往生是活著離開,雖然表面看也是人死了,但是性質是不同的,一般人死亡基本都是墮落三惡道,死亡是極為痛苦的,往生極...

蘋果4和4s哪個更好,蘋果4和4S有什麼區別?怎麼區分?

首先外觀是一樣的。系統可以升級也差不多。不一樣的是4s有siri人機對話,800鏡頭,螢幕更加鮮豔更加清晰,相比4訊號好多了!cpu提升非常非常明顯 平均每個操作都比4快半秒以上,連解鎖螢幕都比4流暢 a5處理器雖然雙核但是面積更小做工更精細 32奈米 所以耗電發熱基本不變。而且開3g時4s更省電發...

itouch4和ipone4到底有什麼區別?價格是多少

1全部itouch4 8g版一般為1500左右,32g版在2000左右,網購價要便宜200元左右,儘量去實體網購店,有保障 差別主要表現在 iphone4 500萬 100永珍素,itouch4 70萬 30永珍素,無自動調光,無閃光燈 itouch4無通訊功能 有wifi 可加皮 話筒位置 ito...