2017-07-29 187 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

相关问题