C语言中*与[ ]有什么区别?
展开全部
用你的例子来说,变量a,p都指向的是一个整形数组的首地址,你可以用下面的打印语句:
printf("%p\n%p\n",a,p);
两个值是一样的。这里的a和p没有太大的区别,只是a是有自己的内存空间的(3个整数的空间),而p没有。
a[i](p[i])是表示从a(p)这个地址开始往后数i个元素,而这里的a,p指向的是同一个空间,所以a[i],p[i]是相同的
而*a(*p)表示的是当前你的指针所指向的元素。你的例子当中,*a,*p表示的都是数组的第一个元素,当然你也可以将指针向后移动
printf("%p\n%p\n",a,p);
两个值是一样的。这里的a和p没有太大的区别,只是a是有自己的内存空间的(3个整数的空间),而p没有。
a[i](p[i])是表示从a(p)这个地址开始往后数i个元素,而这里的a,p指向的是同一个空间,所以a[i],p[i]是相同的
而*a(*p)表示的是当前你的指针所指向的元素。你的例子当中,*a,*p表示的都是数组的第一个元素,当然你也可以将指针向后移动
展开全部
*a == a[0]
*(a+i) == a[i]
区别当然有,优先级不一样啊, [] 的优先级高
*(a+i) == a[i]
区别当然有,优先级不一样啊, [] 的优先级高
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
*是乘法 [ ] 是数组,,,,,,
追问
我是想问指针运算符*与取地址运算符[ ],在使用时有什么区别?例如:
#include
int main ()
{int a[3]={23,4,66},i;
int *p=a;
p=a;
for(i=0;i<3;i++)
printf("*p[i]=%d,a[i]=%d\n",p[i],a[i]);
return 0;
}
结果a[i]与p[i]相等。这是为什么?指针运算符*与取地址符是怎么进行运算的?
追答
不好意思 我只是为了完成任务过来打酱油的。。 不过你这个例子 for循环控制输出 p[i]和p[a]的每个元素 p=a 所以结果相等啊
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询