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...