c - 嵌套结构数组的 sizeof()

标签 c

已编辑

#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/

相关文章:

C:只有if语句中的第一个条件有效

c - 监听线程不打印语句

c - 在 C 中将文件 Strtok 放入数组中

c - 是什么导致 pthread 失效?

c - 查找具有相同设置位数的下一个更大的数字

c - 在 c 中使用 fork 和 execvp 导致错误

c - 在C中反序列化一个字符串

c - 为什么 Golang 比 ANSI C 快,我该如何优化我的解决方案?

c++ - Wifi 原始数据传输

C:两个数组相除