weixin_51143265 2022-03-18 00:01 采纳率: 100%
浏览 71
已结题

c语言指针的有关问题

#include<studio.h>
int main(){
int *p,i,j;
int a[][]={1,2,3,4,5,6,7,8,9};
p=*a;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
printf("%d",(&p)[i][j]);
return 0;
}
上面这段代码为何无法遍历输出 a数组的全部元素?这种方式访问a数组有什么错误?

  • 写回答

2条回答 默认 最新

  • 关注
    a是3*3的二维数组
        int a[3][3] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
    也就等同是3个长度为3的一维数组
    所以p应该是指向长度为3的一维数组的指针
        int (*p)[3];
    这样p才能用p[i][j]两个下标.
    p[i]返回的是一维数组的地址, 其中i每增加1,指针就向后移动3个int类型字节长度地址
    [j]是在p[i]指针移动后的基础上再向后移动j个int类型字节长度
    
    你用int *p就是指向一个int类型字节长度地址
    这样只能用p[i]一个下标.
    p[i]返回的是数值,不是地址,就不能用第二个下标[j]
    
    #include <stdio.h>
    #include <stdlib.h>
    int main()
    {
        int (*p)[3], i, j;
        int a[3][3] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
        p = *a;
        for (i = 0; i < 3; i++)
            for (j = 0; j < 3; j++)
                printf("%d", p[i][j]);
        return 0;
    }
    

    如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!

    img

    本回答被专家选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 3月29日
  • 专家已采纳回答 3月21日
  • 修改了问题 3月18日
  • 修改了问题 3月18日
  • 展开全部

悬赏问题

  • ¥15 iis10中如何阻止别人网站重定向到我的网站
  • ¥15 滑块验证码移动速度不一致问题
  • ¥15 定制ai直播实时换脸软件
  • ¥100 栈回溯相关,模块加载后KiExceptionDispatch无法正常回溯了
  • ¥15 Utunbu中vscode下cern root工作台中写的程序root的头文件无法包含
  • ¥15 麒麟V10桌面版SP1如何配置bonding
  • ¥15 Marscode IDE 如何预览新建的 HTML 文件
  • ¥15 K8S部署二进制集群过程中calico一直报错
  • ¥15 java python或者任何一种编程语言复刻一个网页
  • ¥20 如何通过代码传输视频到亚马逊平台