som*_*erd 2 c pointers multidimensional-array
我是一名学习C的学生,试着把头脑包裹起来.
假设你有一些多维数组int multi[2][2]
.值multi
将是指向地址的指针multi[0]
.为简单起见,假设地址为1000.解除引用会multi[0]
提取另一个地址,这会解决地址multi[0][0]
.取消引用,反过来,获取值(或者如果在左侧则返回分配地址.)
现在,multi + 1
返回第二个指针的地址.假设我们有4个字节的整数(每个嵌套数组有两个),因此返回的地址multi + 1
将是1008.该地址将包含地址multi[1][0]
,即1008.
所以在这里我看到一个模式:不这是不是意味着在地址multi[0]
,multi[1]
等,包含一个指向自己的地址?
数组和指针是不同的.这个主题在书中经常表现不佳.
在这种情况下int multi[2][2]
,这是一个4
连续的整数块.没有涉及指针.C的类型系统将该块分成两个子阵列,每个子阵列包含2
整数.
这些表达式:multi
, multi[0]
表示阵列.当您使用表示数组的表达式时,在除sizeof
or 之外的上下文中&
,然后执行转换,并且该转换的结果是指向数组的第一个元素的指针.
这个指针是一个右值,即它具有相同的状态x + y
:它是你可以使用的值,但它不消耗任何存储空间(至少,它不存储为数组的一部分); 而且你不能&
在它上面使用运算符.