为什么&运算符为struct类型赋予不同的值

Wea*_*ped 0 c memory-address

考虑以下测试程序(键盘执行):

#include <stdio.h>
#include <string.h>


struct camp {
    char b[8];
};


int main()
{
    struct camp c;
    strcpy(c.b, "Hello");
    c.b[5] = '\0';
    printf("c size: %d\nAddress (amp): %d :: %d\n", sizeof(c), &c, c);
    printf("Address of b: %d :: %d\n", &(c.b), c.b);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

示例输出:

c size: 8
Address (amp): -1082463628 :: 1819043144
Address of b: -1082463628 :: -1082463628
Run Code Online (Sandbox Code Playgroud)

由(&(c.b)c.b第二次调用printf)给出的地址相同,struct camp c(第一次调用printf)返回不同的地址.此外,&c&(c.b)或相同c.b.

究竟发生了什么?

Som*_*ude 5

什么printf是试图在第一种情况下做的是解释c为整数.c不是一个整数,甚至可以转换为一个整数(显式或隐式)的值,这么写的可以是任何东西,你正在调用未定义行为的价值.