在c语言中*(p+2)和*p+2有什么不同
7个回答
展开全部
一、意思不同
*(p+2) 表示先将地址后移两位,再取地址内容。*p+2 表示先取当前地址内容,然后对内容加2。一个是对地址的操作,一个是对内容的操作,完全不同。
二、用法不同
例如:
有数组a:
1 2 3 4 5
*p=&a;
那么:
*(p+2)=3,*p+2=3
*p就等于1.*(p+X)就是将指针移x的位置。
三、用途不同
1、*p[ ]
在main函数的参数中有使用到,其中的 char *argv[]的argv就是一个指针数组,用来存储函数调用时传进来可变个数的参数
int main(int argc, char *argv[])
{
something you want to do; return 0;
}
2、 (*p)[ ]可以作为二维数组的引用
展开全部
(*p)[2]是数组指针,p是一个指针,指向一个数组的指针;
*p[2]是指针数组,p是一个数组,装载指针的数组。
先看‘*’符号、'()'符号和‘[]’的优先级,在C语言中,'()'和‘[]’符号是相等的等级,'*'的等级比他们两个低;而'()'和'[]'的结合方向是自左向右的,就是说先计算'()'内的。
如此,我们先讲(*p)[2],按照结合方向,先结合‘()’内的*p,说明p是一个指针,在结合‘[]’符号,说明该指针指向的是一个数组,所以(*p)[2]是数组指针;
*p[2]中,‘[]’的优先级比‘*’大,所以先结合p[2],p是一个数组,再结合'*',说明p数组里面装载的是指针,所以*p[2]是指针数组。
*p[2]是指针数组,p是一个数组,装载指针的数组。
先看‘*’符号、'()'符号和‘[]’的优先级,在C语言中,'()'和‘[]’符号是相等的等级,'*'的等级比他们两个低;而'()'和'[]'的结合方向是自左向右的,就是说先计算'()'内的。
如此,我们先讲(*p)[2],按照结合方向,先结合‘()’内的*p,说明p是一个指针,在结合‘[]’符号,说明该指针指向的是一个数组,所以(*p)[2]是数组指针;
*p[2]中,‘[]’的优先级比‘*’大,所以先结合p[2],p是一个数组,再结合'*',说明p数组里面装载的是指针,所以*p[2]是指针数组。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
p是一个指针变量,p本身表示一个存储地址,而*p表示取这个地址单元中的内容。
所以,就可以这样理解:
*(p+2) 表示先将地址后移两位,再取地址内容。
*p+2 表示先取当前地址内容,然后对内容加2。
一个是对地址的操作,一个是对内容的操作,完全不同。
所以,就可以这样理解:
*(p+2) 表示先将地址后移两位,再取地址内容。
*p+2 表示先取当前地址内容,然后对内容加2。
一个是对地址的操作,一个是对内容的操作,完全不同。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
1.(*p)[2] 是指向一维数组(含两个元素)的指针变量
举个例子:
如果是int(*p)[2],表示*p有两个元素,它的每个元素为整形,也就是p所指向的对象是有两个整形元素的数组,即p是指向一维数组的指针
2. *p[2]是指针数组,实质是一个数组,里面的两个元素都是指针
[]的优先级比*的优先级高,p先与[]结合,形成数组p[2],有两个元素的数组,再与*结合,表示此数组是指针类型的,每个数组元素相当于一个指针变量
举个例子:
如果是int(*p)[2],表示*p有两个元素,它的每个元素为整形,也就是p所指向的对象是有两个整形元素的数组,即p是指向一维数组的指针
2. *p[2]是指针数组,实质是一个数组,里面的两个元素都是指针
[]的优先级比*的优先级高,p先与[]结合,形成数组p[2],有两个元素的数组,再与*结合,表示此数组是指针类型的,每个数组元素相当于一个指针变量
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
详细给你说下,比如你定义一个指向整数指针int *p;int a=2;p=&a;其实这里的*p不叫指针,真正的指针是p,指针只是个地址而已,定义的时候加个星号表示你定义的是个指针而不是别的.但使用的时候加星号就表示解引用操作也就是对指针指向的内容的操作,第一个加了括号里面优先级大所以先算括号里,括号里是p+2,根据我刚才说的p是个指针所以加2表示指针向后移动两位,所以算完仍然是指针,再加上括号外面的解引用就表示了它所指向的值,而第二个先算*p表示p所指向的值2所以再加2就成了4.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询