欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

声明和定义结构体需要注意的问题

发布时间:2025/4/16 编程问答 27 豆豆
生活随笔 收集整理的这篇文章主要介绍了 声明和定义结构体需要注意的问题 小编觉得挺不错的,现在分享给大家,帮大家做个参考.
1、为什么不能在声明 结构体的时候直接给成员变量赋声明?(1)声明变量uint8_t  i;(2)声明函数void func(void);(3)声明变量类型typedef  int int32_t(4)结构体的声明struct Node{uint8_t  i;uint32_temp;};(5)联合体的声明union Test{uint8_t  i;uint32_temp;};问题分析:在上面声明的过程中,所有看似din定义的东西都不能被赋值,因为它们只是向计算机说明了一下,我有这么个东西,而不是真正的定义。如果你进行了定义,那么要么被忽略,要么就警告甚至报错。一定要能区分声明和定义。声明的时候,计算机没有为它分配空间,只有定义了,才有空间。所以你是无法为没有空间的东西赋值的。例如下面这种写法:struct Node{uint8_t  i = 10;uint32_temp = 5;};就是不合法的。因为此时只是声明,没有定义变量,自然没空间,所以这种写法不合法。要给i和temp赋值,必须有结构体变量,例如写成:第一种方法:struct Node{uint8_t  i ;uint32_temp;};struct Node node;node.i=10;node.temp = 5;第二种方法:struct Node{uint8_t  i ;uint32_temp;}node;node.i = 10;node.temp=5;以上两种写法,都是合法的。2、结构体里为什么不能定义自己,而只能定义自己的指针?如果写成:struct Node{uint8_t data;struct Node next;};那么你会发现,这个结构体将会不知道自己有多大。如果我们用它定义了一个变量:struct Node node;那么,这个node里有个next,也就是node.next,node.next里还有个next,以此类推,node.next.next.next.next……无穷无尽了。所以这样的结构会导致计算机无法判断它的大小。而如果我们写成指针:struct Node{uint8_t data;struct Node *next;};那么任何指针的大小都是一定的(32位编译器下是4字节,64位编译器下是8字节),所以这个结构体可以确定大小。如果我们用它定义了一个变量:struct Node node;那么此时,node.next是野指针,在你给它分配空间之前,node.next->next是不存在的,所以它的存在是合法的。

 

《新程序员》:云原生和全面数字化实践50位技术专家共同创作,文字、视频、音频交互阅读

总结

以上是生活随笔为你收集整理的声明和定义结构体需要注意的问题的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。