2017-07-29 185 views
2

雖然經歷指針的一個例子我碰到一個線這是*p[5]聲明p5個指針(*p)[5]聲明p作爲指針五行的陣列的陣列。我不明白他們之間的區別。* p [5]和(* p)[5]之間的區別是什麼?

任何人都可以用一個例子來解釋它嗎?

+4

....你有一個不完整* *聲明,和5 = 3! –

+1

這可能會有所幫助:[C指針指向數組/指針消除歧義](https://stackoverflow.com/questions/859634/c-pointer-to-array-array-of-pointers-disambiguation) –

+1

hmm重新打開,因爲解釋被要求。 –

回答

4

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 

我希望這個解釋和例子能夠清楚你的概念。

希望這是有益:)

+1

答案很好解釋。謝謝 –

+0

你**歡迎** @NeerajSewani :) – Ahmad

0

指針就像一個便條;你在它上面寫上你放置實際物體的地方。

數組是一個具有相同隔間的盒子。它可以存儲相同類型的對象。

你有三個球。

三指針數組是一個包含三個貼紙的框。每個標籤都會告訴每個球的位置(它們可能不在同一個地方)。

一個指向三個元素數組的指針是一個粘滯便箋,告訴在哪裏可以找到該框。盒子包含所有樹球。

0

讓我們看看是否這有助於,總之,假設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]。這是指向陣列的指針

0

評估順序因*p[3](*p)[3]而異。

// *p[3] 
x = p[3]; return *x; 
// (*p)[3] 
x = *p; return x[3]; 

注意*p相當於p[0]。因此,...

  • *p[3]相當於p[3][0]
  • (*p)[3]相當於p[0][3]

假設你有數組的數組,不同的是如下所示:

enter image description here

相關問題