C的二维数组理解指针以及存储的方式

int testDoubleRow(){
    int row=2;
    int cow=5;
    int i,j;
    char ** doub=(char **)malloc(row*sizeof(char*));
    doub[0]=(char *)malloc(cow*sizeof(char));
    doub[1]=(char *)malloc(cow*sizeof(char));
    doub[0][1]='a';
    doub[0][2]='b';
    doub[0][3]='c';
    doub[0][4]='d';
    doub[0][0]='e';
    doub[1][0]='A';
    doub[1][1]='B';
    doub[1][2]='C';
    doub[1][3]='D';
    doub[1][4]='E';
    for(i=0;i<row;i++){
       for(j=0;j<cow;j++){
          printf("%u\n",&doub[i][j]);
       }
   }

printf("char0 location is %u\n",doub[0]);
  printf("char1 location is %u\n",doub[1]);

    free(doub[0]);
    free(doub[1]);
    free(doub);

return 1;
}


根据打印的数据,理解数组的数据存储方式以及二维数组的数据存储是很直观的,可以看出来双重指针代表的地址是[0][0]元素的存储地址,然后doub[0] 开始往后排,第一列与第二列的地址差了几个 ,,所以理解指针,要从物理地址的方向上理解,二维指针表示指向的是两个地址 然后两个地址同时指向了不同的两列数字

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值