C 中结构体类型变量代表什么?

Osa*_*rdi 0 c struct

我想知道结构类型变量在 C 中代表什么,我知道 int 类型的变量指的是内存中的整数值,我可以使用该整数变量来执行多种操作,例如加法、减法等。 ..,我知道数组变量表示该数组中第一个元素的地址。

但是结构类型变量呢,它指的是什么(我知道它不是指针,它用于访问结构成员)?

为了更详细地解释这个问题,在下面的示例中,您可以看到struct date类型的birthDate变量的地址与birthDate变量中第一个成员的地址相同。

但变量本身似乎存储某种地址,如您所见,我的问题是存储在结构变量birthDate中的这个值(可能是地址)代表什么?

#include <stdio.h>

int main()
{
    struct date
    {
        int day;
        int month;
        int year;
    };

    struct date birthDate = { 7, 12, 1999 };

    printf("birthDate variable address => %p\n\n", (void*) &birthDate);
    printf("birthDate variable first member address => %p\n\n", (void*) &birthDate.day);

    printf("The struct type birthDate variable value ( which seems to be an address or something :\\ ) => %i (int), %0X (hex)\n\n", birthDate, birthDate);

    int x = 2;

    printf("The interger x variable value ( cool I understand this :) ) => %i\n", x);

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

输出

出生日期变量地址 => 000000000061FE10

birthDate变量第一个成员地址=>000000000061FE10

结构类型birthDate变量值(似乎是地址或其他东西:\)=> 6422016(int),61FDF0(十六进制)

整数 x 变量值(很酷,我明白这一点:))=> 2

dbu*_*ush 6

Astruct表示一个或多个不同类型的对象的分组。在本例中struct date包含 3 个类型的成员int

似乎让您感到困惑的是您正在printf以不应该的方式进行调用:

printf("... birthDate variable value ...=> %i (int), %0X (hex)\n\n", 
       birthDate, birthDate);
Run Code Online (Sandbox Code Playgroud)

和格式说明符分别期望和作为%i它们的参数,但您要为每个传递一个 。不使用正确的格式说明符会触发未定义的行为。所以打印的值实际上没有任何意义。%xintunsigned intstruct date

如果您想查看构成结构体(或与此相关的任何对象)的各个字节,您可以指向unsigned char *对象的开头,循环遍历字节并打印每个字节:

int i;
unsigned char *p = (unsigned char *)&birthDate;
for (i = 0; i < sizeof birthDate; i++) {
    printf("%02x ", p[i]);
}
printf("\n");
Run Code Online (Sandbox Code Playgroud)

  • @OsamaAlkurdi:您单独打印该字段的每个成员。 (2认同)