c - 用另一个结构体初始化该结构体,这可能吗?

标签 c casting structure

我想知道是否可以通过struct2来初始化struct1。 我对类型转换的概念也很陌生。 该代码的输出必须为零。请指导。谢谢!

#include<stdio.h>

typedef struct student
{
 int roll_id[10];
 int name_id[10];
 int postn;
} student;

typedef struct exams
{
int subject[10];
int area;
}exams;

int main()
{
 exams e= { {0} };
 student *pptr= (student*)&e;
 printf (" %d\n", pptr->name_id[9]);
 return 0;
 }

最佳答案

类比很简单:
您买了一个苹果并假装它是一个橙子。
只要你把它当作可以吃的东西来吃就可以吃,但是如果你想吃橙汁的话,你最终会失望的。

用你的两个结构替换 Apple 和 Orange,用编译器替换你。

结构只不过是一 block 内存,通常由不同的数据类型占用。
编译器实现可能会添加 padding bytes 在这些类型之间,结构中的第一个类型除外。
由于两个结构的第一种类型是相同的(10 个整数的数组)。将结构 exam 假装为其他类型,student 可以工作,但如果您尝试访问第一种类型以外的任何其他数据类型,则会导致未定义行为

未定义的行为是您在代码中得到的。

底线:
你不可以做这个。

关于c - 用另一个结构体初始化该结构体,这可能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14211969/

相关文章:

c - 结构数组和 sizeof

c - 在 C 中读取具有可变列数的空格分隔文件

c - 链表C中的无限while循环

c - 如何使用 SoX C 库混合音频文件

c - Posix 线程在其他线程退出后挂起?

Swift:将 AnyObject 转换为 Float 失败

c++ - echo在Boost中输入命令行参数

c - 递归函数的返回值

c - 想了解 C 数组行为

c++ - 允许将 (double *) 转换为 (double **) 吗?