gpt4 book ai didi

c - 在多维数组中,为什么取消引用一行的地址再次导致地址而不是值

转载 作者:行者123 更新时间:2023-12-02 06:48:32 24 4
gpt4 key购买 nike

#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));
}

表达式 (&a[0]+1) 给出 &a[1] 并且输出应该是 2 但上面的输出代码是 &a[1] 为什么?这可能看起来很愚蠢,但请帮助我。

最佳答案

正如您所注意到的,&a[0]+1&a[1]a[1]是3个int的数组,所以&a[1]是3个int<的数组的地址.

这意味着 *&a[1] 是一个包含 3 个 int 的数组。在 C 中,数组会自动转换为其第一个元素的地址(除非它是 sizeof、一元 &_Alignof 的操作数> 或者是用于初始化数组的字符串文字)。所以 *&a[1] 自动变成 &a[1][0]

因为这是一个指针,所以它不应该用 %u 打印。打印它的正确方法是:

printf("%p\n", (void *) *(&a[0]+1));

但是,鉴于您确实使用了 %u,似乎发生的事情是程序打印的指针值被重新解释为 unsigned int。这不是您应该依赖的行为。

关于c - 在多维数组中,为什么取消引用一行的地址再次导致地址而不是值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51065617/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com