在查看指针示例时,我遇到了一条线,即*p[5]将p声明为一个由5个指针组成的数组,而(*p)[5]则将p声明为一个指向五个元素数组的指针。我不明白他们之间的区别。
有人能举个例子解释一下吗?
发布于 2017-07-29 10:17:21
(*p)[5] 1. int
称为指针,用于数组(数组指针)。当谈到多维数组时,我们可以声明一个指针,它可以指向整个数组,而不是array.This指针的一个元素。
在本例中,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是指向整个数组arr.The的指针,ptr的基类型是int,而基类型p是‘一个5个整数的数组’。
我们知道指针算法是相对于基本大小执行的,因此如果我们编写p++,指针将向前移动20个字节。
*p[5]**:** 2.现在来到
这被称为指针的数组(指针数组)
正确的语法是数据类型*数组大小;
我们可以声明一个包含指针的数组,因为它的elements.Every元素是一个指针变量,可以保存任何类型的变量的地址。
/*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我希望这个解释和例子将澄清你的概念。
希望这是有帮助的:)
发布于 2017-07-29 11:02:18
评价的顺序不同。*p[3]决定为*(p[3]),而不是(*p)[3]。还请注意,*p等同于p[0]。所以..。
*p[3]⇔*(p[3])⇔(p[3])[0] p[3][0](*p)[3]⇔(p[0])[3]⇔p[0][3]假设您有一个数组,则区别如下:

发布于 2017-07-29 10:20:09
指针就像一个便条,你把实际的对象写在上面。
数组是一个具有相同间隔的盒子。它可以存储相同类型的对象。
你有三个球。
一个由三个指针组成的数组是一个包含三个贴纸的盒子。每个标签告诉每个球的位置(它们可能并不都在同一个地方)。
指向由三个元素组成的数组的指针是一个粘稠的便笺,它指示在哪里找到该框。盒子里装着所有的树球。
https://stackoverflow.com/questions/45388011
复制相似问题