我想知道结构类型变量在 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
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)