当我用 C 语言在结构体中声明数组时会发生什么?

Lor*_*bot 2 c struct declaration sizeof

我很难理解当我在结构中声明数组时会发生什么。谈论普通数组(int、float、char...类型)我知道数组的名称本身就是指向数组第一个元素的指针。但是,假设我有一个这样的结构:

struct student
{
   char name[12];
   int age;
}
Run Code Online (Sandbox Code Playgroud)

main函数中假设我声明:struct student s1; 嗯,我不明白这个变量是如何在内存中分配的。年龄有 4 个字节,字符串有 10 个字节,但是 name 指针s1.name(它是指向字符串第一个元素的指针,对吗?)呢,它是否也在新结构中分配?

Hol*_*Cat 5

数组不是指针,它们的“名称”也不是指针,无论这意味着什么。

在大多数情况下,它们会隐式转换为指针,但生成的指针是动态计算的,并且在转换之前通常不存在于内存中。

数组(任何元素类型)在内存中存储为 N 个连续元素,仅此而已。

所以,char name[12]占用12个字节(存放12个字符)。int age在大多数现代平台上占用 4 个字节。

因此struct Student占用16字节。struct Student大小的数组N占用字节sizeof(struct Student) * N