1樓:天雲一號
int *p[4]; //定義一個指標陣列,該陣列中每個元素是一個指
針,每個指標指向**就需要程式中後續再定義了。
int (*p)[4]; //定義一個陣列指標,該指標指向含4個元素的一維陣列(陣列中每個元素是int型)。
區分int *p[n]; 和int (*p)[n]; 就要看運算子的優先順序了。
int *p[n]; 中,運算子[ ]優先順序高,先與p結合成為一個陣列,再由int*說明這是一個整型指標陣列。
int (*p)[n]; 中( )優先順序高,首先說明p是一個指標,指向一個整型的一維陣列。
2樓:匿名使用者
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])
是等價的。
3樓:
int* p[4] // 4個元素的
陣列,元素為int型別的指標
int (*p)[4] // p是一個指標,它指向 4個int型元素的陣列
int (&p)[4] // p是引用, 它引用 4個int型元素的陣列.
4樓:匿名使用者
int *p[4] 是一個存int* 的一維陣列
int (*p)[4] 是一個int 陣列 *p指向a[0]
c語言int (*p)[4]和int *p[4]區別 10
5樓:匿名使用者
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].
6樓:一樹的果
第一個是指標陣列,第二個是陣列指標。區別是他是一個指標還是多個指標。
陣列指標只是一個指標變數,似乎是c語言裡專門用來指向二維陣列的,它佔有記憶體中一個指標的儲存空間。指標陣列是多個指標變數,以陣列形式存在記憶體當中,佔有多個指標的儲存空間。
int (*p)[4]就相當於int p[4],它就是一個二維陣列的指標,可以指向一個第二維度為4的二維陣列
int (*p)[4] 和 int *p[4]的區別?
7樓:仁昌居士
int (*p)[4] 和 int *p[4]的區別bai為:性質
du不同
、長度不zhi同、指向不dao同。
一、性質不同
1、int (*p)[4]:int (*p)[4]是個指標,指回向有四個int型別數答據的陣列。
2、int *p[4]:int *p[4]是個陣列,每個元素都是一個int *指標。
二、長度不同
1、int (*p)[4]:int (*p)[4]的長度為1,為一個陣列。
2、int *p[4]:int *p[4]的長度為4,有四個元素空間。
三、指向不同
1、int (*p)[4]:int (*p)[4]的指標指向明確,為陣列的邏輯地址位置。
2、int *p[4]:int *p[4]每個指標指向**需要程式中後續再定義。
8樓:匿名使用者
int (*p)[4] 陣列指標是指標,指標指向一陣列。
int *p[4] 指標陣列是陣列,陣列裡面放指標。
9樓:自我催眠
第一個是定義一個指標p指向含有四個元素的陣列;第二個是定義一個陣列,每個元素都是指標
10樓:匿名使用者
int (*p)[4]為指向陣列的指標,即p為指向包含4個元素的一維陣列的指標變數;
int *p[4] 為指標陣列,定義指標陣列p,它由4個指向整型資料的指標元素組成;
11樓:迷茫de求知者
前面的陣列的元素是指標;
後面的是一個長度為4的指標陣列,就同int型的陣列一樣了
const int *p和int * const p的區別
12樓:育知同創教育
const int *p和int * const p的區別如下:
const int *p表明指向的物件是const型,不可以修改,但是指標p的指向可以修改。
* const p表明指標變數p是const型,它的指向不可修改,但是指向的物件可以修改。
一般來說用*限定的是指標區域存放的內容,不用*的是記憶體地址。
13樓:刀無極啊
你可以看看這篇文章,講的很仔細
c語言中 int*p[4] 和 int(*p)[4]的區別是什麼?
14樓:匿名使用者
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])
是等價的。
15樓:望闌珊將盡
結合性不一樣:前者是指標陣列,為4個int指標的陣列,有4個元素;後者是陣列指標,為一個指標,型別為指向包含4個int型別元素的一維陣列的指標。
c語言中 int *p[4]和int (*p)[4]在定義和使用方面有什麼區別? o(∩_∩)o謝謝
16樓:勞傷痕
*p[4]這指標陣列,定義一個陣列,裡面存放的是指標。
(*p)[4]定義的是一個指向一維陣列的指標,這是一個指標,p++相當於p的地址相加了1*4
舉例說明:
#include
void main()
,};int *p[4],(*q)[2];
q=a;
p[0]=&a[0][0];
p[1]=&a[0][1];
p[2]=&a[1][0];
p[3]=&a[1][1];
for(int i=0;i<4;i++)
printf("%d\t",*p[i]);
printf("\n");
for(int j=0;j<2;j++,q++)printf("\n");
}}輸出的結果是:
指標陣列:1,2,8,9指標陣列中的每個元素都要給其賦予地址,否則出錯
陣列指標:1,9陣列指標只要開始賦值頭地址,之後執行q++是相加維數,所以結果是1,9而不是1,2
17樓:
//舉例說明:
int *p1[4];//定義指標陣列。這個陣列有四個元素,每個元素都是指向整形變數的指標。
int (*p2)[4];//定義一個指標變數,指向一行有四個整形元素的行指標;
int a[4];
int b[5][4];
的元素分別指向一維陣列a的每一個元素。
p2=b;//p2指向二維陣列b的第一行。
c語言中int (*p)[4]與int **p的區別
18樓:匿名使用者
經過兩天的上機試驗和自己的推理,我要感謝的是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個一維陣列並不是相連的,這與二維靜態陣列中的每個一維陣列的地址是相連線的不同。 19樓:匿名使用者 這兩個p的定義是不相容的, 就是說如果你定義一個 int **a , int (*b)[4],他們之間互相賦值必須經過強制型別轉換,否則編譯器通不過。 但是並不是說這兩者之間有多大的差別, 很多時候他們之間的互相賦值是合理的。 我已經說的很清楚了, 型別之間談相等沒有任何意義。 型別之間主要就是相容性, 這兩個按語法規則就是不相容。 至於你說的「含義」相同與否,含義這個東西語法是不認的,含義是不是相同看你腦子裡怎麼想。 要知道,你腦子裡的程式跟編譯器眼裡的東西不是一回事的 20樓:匿名使用者 int (*p)[4];//是指向一個2維陣列的指標int **p;//是一個指標的指標 兩個都是指向地址的 int (*p)[4] 是接收二維陣列的地址(常量)int **p 是接收指標變數的地址(變數)我是這麼理解的,不知道對不。 21樓:百地瓜 不相等,int(*p)[4]是4個指向一唯陣列的指標,int **p是一個指向二維陣列的指標。從定義角度出發是不一樣的 22樓:廣東良民 就像百地瓜說的啊,一般int(*p)[4]要用的時候都是要帶著下標,除了作為實參的時候. c語言/指標/ int *p[4]和int (*q)[4] 的含義和區別 23樓:匿名使用者 前者p是一個4個元素的陣列,元素為int *(指向整型資料的指標)變數,p代表陣列名,是地址常量。後者q是指標變數,指向int [4](即含有四個整型元素的陣列)。 24樓:拉丨登 前面是指標陣列,是一個陣列!p裡面裝的是4個指標。後面這個是陣列指標,是一個指標!(意思是一個指向陣列的指標,該陣列有4個元素) int p為引來用,而int p為定義變數。二者源區別如下 1 引用在bai定義的時候必須 du賦值,否則編zhi譯會出錯。正確的形式為daoint p a 其中a為int型變數。2 引用在定義時不會分配空間,只是初始化變數的一個別名。如int p a 的形式,後續對p的操作,與對a操作完全等價。我... d和 4d都是c語言中標準輸入函式 scanf 和輸出函式 printf 的輸入輸出格式說明符。下面舉例說明 d和 4d的用法與區別。int i,j scanf d 4d i,j 接收使用者輸入的資料,對一個資料儲存在i中,第二個儲存在j中,對於第一個資料沒什麼限制,第二個資料取前四位 如輸入123... n 這種形式是字尾自增1運算,表示先使用n值,然後n n 1自增1 i這種形式是字首自增1運算,表示先對i進行i i 1自增1,然後再使用i值 如果是單獨執行這樣的語句,兩者沒有區別,如 for i 0 i 輸出0 9 與for n 0 n 輸出0 9 這兩者都會迴圈10次,沒有差別。而下面的語句 ...在c中,intp和intp有什麼區別
c語言中,d和4d有什麼區別c語言中d和5d什麼區別
c語言中的for語句和ni語句,C語言中的for語句和n i 語句