los*_*ika 2 c pointers multidimensional-array
#include <stdio.h>
void main() {
int a[4][3] = {
{ 3, 5, 7 },
{ 2, 4, 67 },
{ 21, 8, 9 },
{ 2, 45, 6 }
};
printf("%u ", *(&a[0]+1));
}
Run Code Online (Sandbox Code Playgroud)
表达式(&a[0]+1)给出&a[1]和输出应该是2但上面代码的输出是&a[1]为什么?这可能看起来很傻,但请帮助我.
你注意到的&a[0]+1是&a[1].a[1]是3的数组,3的数组的地址也是int如此.&a[1]int
这意味着*&a[1]是一个3的数组int.在C中,数组自动转换为其第一个元素的地址(除非它是sizeof一元的操作数&,_Alignof或者是用于初始化数组的字符串文字).所以*&a[1]自动成为&a[1][0].
由于这是一个指针,因此不应该打印%u.打印它的正确方法是:
printf("%p\n", (void *) *(&a[0]+1));
Run Code Online (Sandbox Code Playgroud)
但是,鉴于你确实使用过%u,似乎发生的事情是程序打印指针的值被重新解释为unsigned int.这不是你应该依赖的行为.