printf输出语句看不懂?

#include <stdio.h>
int main()
{
    int a[]={1,2,3},*p,i;
    p=a;
    for(i=0;i<3;i++)
        printf("\n%d %d %d %d",a[i],p[i],*(p+i),*(a+i));
    return 0;
}

  • a表示数组的起始地址,相当于一个门牌号,指针p=a表示p指向地址a,可以通过p间接访问a的内容;
  • *表示取地址运算,*p表示取出p指向地址的第一个元素,*(p+i)表示取出从p地址开始往后的第i个元素的内容;
  • *(a+i)表示取出从a开始往后的第i个元素

由于p=a,所以a[i],p[i],*(p+i),*(a+i)都是一样的

a[i],p[i]是数组方式操作

*(p+i),*(a+i)是指针方式操作

结果是一样的。

 printf("\n%d %d %d %d",a[i],p[i],*(p+i),*(a+i));
等价于
 printf("\n%d ",a[i]);
 printf("%d ",p[i]);
 printf("%d ",*(p+i));
 printf("%d ",*(a+i));

 

您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632