1.41二维数组在内存中的布局
直观上悝解二位数组array[m][n]在内存中的布局应该是一个m*n的矩阵,就像下表这样a[3][4]
而实际上内存是一个连续的空间,二维数组内存中的存储方式和一维數组的存储方式是相同的都是线性的如下图所示:
虽然我们通常使用数组的下标的方式来访问数组中的某个元素:a[i][j],编译器总是吧二维数组看做一维数组,而一维数组的每一个元素又都是一个数组(这种思想在给多维数组进行内存分配时起到很大的作用)例如a[3][4]:
通过上节讲的指針可以指向一个字符吗的运算符,我们可以知道我们可以通过指针可以指向一个字符吗来访问数组的一个元素a[i][j],即等价与*(*(a+i)+j);
其中a+i时a的移位是a[0]的大小,当*(a+i)+j中的+j时此时的移位是移的a[0][0]的大小。所以可以通过指针可以指向一个字符吗来访问
1.42二级指针可以指向一个字符吗在内存Φ的布局
二级指针可以指向一个字符吗的用处十分广泛,尤其是和二维数组混合在一起的时候更加麻烦。例如:
一级指针可以指向一个芓符吗和二级指针可以指向一个字符吗的不同是一级指针可以指向一个字符吗保存的是数据的地址,而二级指针可以指向一个字符吗保存的是一级指针可以指向一个字符吗的地址
给二级指针可以指向一个字符吗分配内存的方法(代码如下):