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之前。

 

posted on 2019-02-11 02:14  暴躁法师  阅读(397)  评论(0编辑  收藏  举报