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] 开始往后排,第一列与第二列的地址差了几个 ,,所以理解指针,要从物理地址的方向上理解,二维指针表示指向的是两个地址 然后两个地址同时指向了不同的两列数字