雖然經歷指針的一個例子我碰到一個線這是*p[5]
聲明p
如5個指針而(*p)[5]
聲明p
作爲指針五行的陣列的陣列。我不明白他們之間的區別。* p [5]和(* p)[5]之間的區別是什麼?
任何人都可以用一個例子來解釋它嗎?
雖然經歷指針的一個例子我碰到一個線這是*p[5]
聲明p
如5個指針而(*p)[5]
聲明p
作爲指針五行的陣列的陣列。我不明白他們之間的區別。* p [5]和(* p)[5]之間的區別是什麼?
任何人都可以用一個例子來解釋它嗎?
1. INT (*p)[5]
稱爲指向數組的指針(數組指針)。我們可以聲明一個指向整個數組的指針,而不是隻指向數組的一個元素。在討論多維數組時,這個指針非常有用。
在這個例子中,p是可以指向5個整數數組的指針。
/*Pointer to an array*/
#include<stdio.h>
int main(void)
{
int *ptr; /*can point to an integer*/
int (*p)[5];/*can point to an array of 5 integers*/
int arr[5];
ptr=arr;/*points to 0th element of arr*/
p=&arr;/*points to the whole array arr*/
printf("ptr=%p,p=%p\n",ptr,p);
ptr++;
p++;
printf("ptr=%p,p=%p\n",ptr,p);
return 0;
}
Output:
ptr=0012FEAC,p=0012FEAC
ptr=0012FEB0,P=0012FEC0
這裏PTR是指針指向數組ARR的第0個元素,而p是指針指向整個陣列的ptr的arr.The基類型是int,而p的基本類型是「5的陣列整數。我們知道指針運算是相對於基本大小執行的,所以如果我們編寫p ++,那麼指針將向前移動20個字節。
2.現在來*p[5]
:
這被稱爲數組指針(指針數組)的
正確的語法是數據類型* arrayName中[大小];
我們可以聲明一個包含指針作爲其元素的數組。該數組的每個元素都是一個指針變量,可以保存適當類型的任何變量的地址。
/*Array of pointers*/
#include<stdio.h>
int main(void)
{
int *p[5];
int i,a=5,b=10,c=15;
p[0]=&a;
p[1]=&b;
p[2]=&c;
for(i=0;i<3;i++)
{
printf("p[%d]=%p\t",i,p[i]);
printf("*p[%d]=%d\n",i,*p[i]);
}
return 0;
}
Output:
p[0]=0012FEB4 *p[0]=5
p[1]=0012FEA8 *p[1]=10
p[2]=0012FE9C *p[2]=15
我希望這個解釋和例子能夠清楚你的概念。
希望這是有益:)
答案很好解釋。謝謝 –
你**歡迎** @NeerajSewani :) – Ahmad
指針就像一個便條;你在它上面寫上你放置實際物體的地方。
數組是一個具有相同隔間的盒子。它可以存儲相同類型的對象。
你有三個球。
三指針數組是一個包含三個貼紙的框。每個標籤都會告訴每個球的位置(它們可能不在同一個地方)。
一個指向三個元素數組的指針是一個粘滯便箋,告訴在哪裏可以找到該框。盒子包含所有樹球。
讓我們看看是否這有助於,總之,假設int
1)int *p[3]
int *p1 = &i;
int *p2 = &j;
int *p3 = &k;
代替上述3個單獨的指針,我可以有一個指針數組爲int *p[3]
。陣列中的每個元素可以指向i,j, and k
,都是ints
2)int (*p)[3]
int array[3];
如果我想指向這個array
具有3種元素的指針,該指針聲明將是int (*p)[3]
。這是指向陣列的指針
....你有一個不完整* *聲明,和5 = 3! –
這可能會有所幫助:[C指針指向數組/指針消除歧義](https://stackoverflow.com/questions/859634/c-pointer-to-array-array-of-pointers-disambiguation) –
hmm重新打開,因爲解釋被要求。 –