1樓:匿名使用者
1,前者,p是乙個指標,後者p是乙個陣列,差別太大,以至於沒有什麼相同的地方(⊙﹏⊙)
2,沒太理解問題,請用一小段**說明。
c語言int (*p)[4]和int *p[4]區別 10
2樓:匿名使用者
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].
3樓:一樹的果
第乙個是指標陣列,第二個是陣列指標。區別是他是乙個指標還是多個指標。
陣列指標只是乙個指標變數,似乎是c語言裡專門用來指向二維陣列的,它佔有記憶體中乙個指標的儲存空間。指標陣列是多個指標變數,以陣列形式存在記憶體當中,佔有多個指標的儲存空間。
int (*p)[4]就相當於int p[4],它就是乙個二維陣列的指標,可以指向乙個第二維度為4的二維陣列
c語言中int (*p)[4]與int **p的區別
4樓:匿名使用者
經過兩天的上機試驗和自己的推理,我要感謝的是dukehhh同志,我是沿著你的想法推理下去的,你的想法是正確的,而且我還幫你進行了補充:
int *p;是乙個指標變數,與之相對應的是int p[n];
int (*p)[4];//是指向乙個2維陣列的指標,與之相對應的是int p[4];
int **p;//是指向乙個指標的指標 ,與之相對應的是int *p[n],它們都是指向字串的指標陣列,而且二位動態陣列開闢後只能將值賦予它(**p),因為只有它的資料結構才能滿足;
兩個都是指向位址的 。
很多朋友為二維動態陣列的資料結構感到困惑,現在我將我對它的分析先給大家,希望對大家能有一些幫組:
先通過p=(int **)malloc(n*sizeof(int *));相當分配了n個連續的int *型別的記憶體空間,它們的位址是相連的,即p[n]陣列,其型別是int *型別,現在為陣列中的每個變數(p[0]、p[1]、p[2]…p[n-1])賦值,賦的值都是位址值,也就是for(i=0;i p[i]=(int *)malloc(m*sizeof(int));其中,每個p[n]相當於一維陣列的陣列名,由於記憶體分配函式分配記憶體是隨機的,所以這n個一維陣列並不是相連的,這與二維靜態陣列中的每個一維陣列的位址是相連線的不同。 5樓:匿名使用者 這兩個p的定義是不相容的, 就是說如果你定義乙個 int **a , int (*b)[4],他們之間互相賦值必須經過強制型別轉換,否則編譯器通不過。 但是並不是說這兩者之間有多大的差別, 很多時候他們之間的互相賦值是合理的。 我已經說的很清楚了, 型別之間談相等沒有任何意義。 型別之間主要就是相容性, 這兩個按語法規則就是不相容。 至於你說的「含義」相同與否,含義這個東西語法是不認的,含義是不是相同看你腦子裡怎麼想。 要知道,你腦子裡的程式跟編譯器眼裡的東西不是一回事的 6樓:匿名使用者 int (*p)[4];//是指向乙個2維陣列的指標int **p;//是乙個指標的指標 兩個都是指向位址的 int (*p)[4] 是接收二維陣列的位址(常量)int **p 是接收指標變數的位址(變數)我是這麼理解的,不知道對不。 7樓:百地瓜 不相等,int(*p)[4]是4個指向一唯陣列的指標,int **p是乙個指向二維陣列的指標。從定義角度出發是不一樣的 8樓:廣東良民 就像百地瓜說的啊,一般int(*p)[4]要用的時候都是要帶著下標,除了作為實參的時候. c語言中 int*p[4] 和 int(*p)[4]的區別 9樓:天雲一號 int *p[4]; //定義乙個指標陣列,該陣列中每個元素是乙個指 針,每個指標指向**就需要程式中後續再定義了。 int (*p)[4]; //定義乙個陣列指標,該指標指向含4個元素的一維陣列(陣列中每個元素是int型)。 區分int *p[n]; 和int (*p)[n]; 就要看運算子的優先順序了。 int *p[n]; 中,運算子[ ]優先順序高,先與p結合成為乙個陣列,再由int*說明這是乙個整型指標陣列。 int (*p)[n]; 中( )優先順序高,首先說明p是乙個指標,指向乙個整型的一維陣列。 10樓:匿名使用者 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]) 是等價的。 11樓: int* p[4] // 4個元素的 陣列,元素為int型別的指標 int (*p)[4] // p是乙個指標,它指向 4個int型元素的陣列 int (&p)[4] // p是引用, 它引用 4個int型元素的陣列. 12樓:匿名使用者 int *p[4] 是乙個存int* 的一維陣列 int (*p)[4] 是乙個int 陣列 *p指向a[0] c語言中 int*p[4] 和 int(*p)[4]的區別是什麼? 13樓:匿名使用者 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]) 是等價的。 14樓:望闌珊將盡 結合性不一樣:前者是指標陣列,為4個int指標的陣列,有4個元素;後者是陣列指標,為乙個指標,型別為指向包含4個int型別元素的一維陣列的指標。 a代表陣列的首位址,a 0 代表這個二維陣列第一行的首位址,雖然這兩個位址值是一樣的 int p a表示p是指向int型別的指標a是乙個二維陣列,其指標指向的是一維陣列,一維陣列才指向的是int,因此得用兩重指標表示 int p a int p 4 a 定義的是乙個有4個元素的int陣列的指標,而a... a是乙個一維陣列,陣列裡的值是指標,指向的還是一維陣列。即等價於,int x 2 2,0 int y 2 4,8 int a 2 x,y 我想你應該知道答案了。c語言中二維陣列的定義問題 正確寫法如下 char fd jgf1 maxitemlen 1 說明 把null去掉 1.二維陣列的第乙個維度... 先說些這個2維陣列 int arr 3 4 可以理解為乙個3行四列的矩陣,那麼第一維arr 0 arr 1 arr 2 中存的分別是對應行的位址,也就是說arr 0 存的是乙個 大小為4的整形陣列位址 這樣的話就好理解了,arr存的位址值其實與arr 0 本質上是相同的。都是這個連續空間的開始位址。...C語言二維陣列問題
關於c語言二維陣列的問題,C語言中二維陣列的定義問題
關於c語言二維陣列陣列名與指標的問題