虽然经历指针的一个例子我碰到一个线这是*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重新打开,因为解释被要求。 –