已编辑
#include<stdio.h>
typedef struct ns{
int sd;
int we;
char st;
int m;
}ds;
typedef struct numb
{
char b;
ds rt;
}num;
static num a[]={1,'a'};
int read(int number)
{
printf("%d\n",number);
return 1;
}
int main()
{
printf("%d",sizeof(a[0].rt));
read(sizeof(a[0].rt));
read(sizeof(a[0]));
return 0;
}
我怀疑当作为参数传递时数组的 sizeof 将被修改为临时指针变量。但是在尝试打印 sizeof 时,在结构数组以及嵌套结构数组中,它给出了实际大小。为什么包含结构数组的第二次读取未转换为指针作为数组。
最佳答案
你的问题不是很清楚。
无论如何,首先,当数组隐式转换为指针时,标准的数组到指针转换负责。 数组到指针的转换在某些上下文中隐式应用,但并非在所有上下文中。例如,数组到指针的转换 不适用于 sizeof
的操作数,这就是为什么 sizeof
(与数组一起使用时) , 正确计算为数组大小(而不是指针大小)。
其次,a[0]
不是数组。 a
是一个数组。 a[0]
是一个 num
对象,根本不是数组。所以,为什么你期望 a[0]
被转换为指针对我来说完全不清楚。
关于c - 嵌套结构数组的 sizeof(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8146383/