总有一天你的谜底会解开 2020-12-17 20:43 采纳率: 77.4%
浏览 7
已采纳

新手遇到了一个问题, 求好心人解救

#include"stdio.h"
int main()
{
    int x[2]={1,2};
    int w[2]={3,4};
    int *a[2]={x,w};
    int b,c,d,**p;
    p=a;
    for(b=0;b<2;b++)
    {
        for(c=0;c<2;c++)
        printf("%-2d",*(*(p+b)+c));
        printf("\n");
    }
  }

这里指针的指针p,似乎完成了一个整形二维数组的输出。于是,我就认为指针的指针再加上malloc对*p内存的申请,可以使**p使用连续的内存,这就类似有一个数组;我认为 指针的指针就可以表示一个二维数组,但是当我如下定义时,却出错了:

#include"stdio.h"
int main()
{
    i
   
    int a[2[2]={1,2,3,4};
    int b,c,d,**p;
    p=a;//编译器提示错在这一行
    for(b=0;b<2;b++)
    {
        for(c=0;c<2;c++)
        printf("%-2d",*(*(p+b)+c));
        printf("\n");
    }
    
}

请问我错哪了,急,求解

  • 写回答

2条回答 默认 最新

  • dd__db 2020-12-18 16:55
    关注

    假设

    x,w,a的地址分别为0x00,0x08,0x10

    那么

    x[0]的地址为0x00,存放int类型的数据为1

    x[1]的地址为0x04,存放int类型的数据为2

    w[0]的地址为0x08,存放int类型的数据为3

    w[1]的地址为0x0C,存放int类型的数据为4

    a[0]的地址为0x10,存放int*类型的地址,即存放的值为0x00

    a[1]的地址为0x14,存放int*类型的地址,即存放的值为0x08

    p的数据类型为int*,a的数据类型也为int*,存放的是x和w的地址

    所以a和p的数据类型相同

    p=a;

    就是p指向a的地址0x10,

    *p是指0x10存放的内容,即x的地址0x00

    **P可以理解为*(*p),取x地址存放的内容,所以值为1

     

    而假设a[2][2]的地址为0x00

    a[0][0]的地址为0x00,存放int类型的数据为1

    a[0][1]的地址为0x04,存放int类型的数据为2

    a[1][0]的地址为0x08,存放int类型的数据为3

    a[1][1]的地址为0x0C,存放int类型的数据为4

    p的数据类型为int*,a的类型为int存放整型数据

    数据类型不同

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器