CSAPP阅读笔记-数组分配与访问-来自第三章3.8的笔记-P176-P183
这一节比较简单,仅记录几个比较重要的点:
1.C语言允许对指针进行运算,计算出的值会根据该指针引用的数据类型大小进行伸缩。
例子:
其中,xE是数组的起始地址。注意,指针运算时,若最终结果为指针,则指针的值会根据引用的数据类型进行拉伸。若最终结果为数值,则结果会被压缩,如最后一行所示,算出的结果不是4i,是4i/4=i。
2.对于多维数组,以二维数组为例,如int A[5][3],实际上等价于:typedef int row3_t[3]; row3_t A[5];
此外,数组元素在内存中存储时以“行优先”的顺序排列,以上面的A为例,先存A[0][0],随后A[0][1],A[0][2].....,A[1][0],A[1][1]....,A[4][2]
3.某些情况下,数组声明时无需显示地标明维度,传统情况下,声明数组时,至少需要表明列数,比如 int A[][5]。
而
int var_ele(long n,int A[n][n],long i,long j)
{
return A[i][j];
}
这种情况下,声明数组A时列维度用了表达式n来表示,它有一个限制,就是参数n排在参数A之前。