多维数组:指针不指向自己的地址吗?

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]等,包含一个指向自己的地址

M.M*_*M.M 7

数组和指针是不同的.这个主题在书中经常表现不佳.

在这种情况下int multi[2][2],这是一个4连续的整数块.没有涉及指针.C的类型系统将该块分成两个子阵列,每个子阵列包含2整数.

这些表达式:multi, multi[0]表示阵列.当您使用表示数组的表达式时,在除sizeofor 之外的上下文中& ,然后执行转换,并且该转换的结果是指向数组的第一个元素的指针.

这个指针是一个右值,即它具有相同的状态x + y:它是你可以使用的值,但它不消耗任何存储空间(至少,它不存储为数组的一部分); 而且你不能&在它上面使用运算符.