总有一天你的谜底会解开 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 android报错 brut.common.BrutException: could not exec (exit code = 1)
  • ¥15 nginx反向代理获取ip,java获取真实ip
  • ¥15 eda:门禁系统设计
  • ¥50 如何使用js去调用vscode-js-debugger的方法去调试网页
  • ¥15 376.1电表主站通信协议下发指令全被否认问题
  • ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证
  • ¥15 复杂网络,变滞后传递熵,FDA
  • ¥20 csv格式数据集预处理及模型选择
  • ¥15 部分网页页面无法显示!
  • ¥15 怎样解决power bi 中设置管理聚合,详细信息表和详细信息列显示灰色,而不能选择相应的内容呢?