C语言为何访问结构体中的结构体不到数据?

Python09

C语言为何访问结构体中的结构体不到数据?,第1张

要注意看编译器给你的warning,不要程序只要能跑起来就当作没事了。程序员必须比编译器严格,不要说编译器报错了,即使不报错都要仔细检查

首先,我甚少使用这种方法对结构体进行初始化。看起来对嵌套结构的初始化这种方法并没有完全工作

你还不如写

s.st.b= 55

s.st.d = 'b'

假定编译器一定按照定义变量的顺序依次初始化各个字段有点冒险

其次:'hello'是明显的语法错误,不知道为什么编译器只报告warning,你应该写

"hello"

放在.h头文件中再#include是一个办法

另一个办法是使用extern关键字

首先要明白,编译器是分别编译源文件的,也就是分别编译test.c和main.c

test.c中使用到main.c中定义的变量的话,在main.c中加上

extern someType var   //比如extern int a

加上这行代码编译器才知道你确实在别的地方定义了这么一个东西,在连接阶段linker会连接编译阶段分别生成的.obj文件,这时候就确实可以找到b这个变量了。

当然,对于你这个情况,用extern编译器虽然知道了有b这么一个变量,但是还是不知道有

struct {

    int a

}

这么一个结构体类型,那编译器当然不知道

b.a

表示的是什么意思。还是报错。所以还是用#include吧

访问结构体元素,根据结构体变量的类型,有两种方法。

1

变量为结构体对象。

如果变量a为结构体对象,且结构体内有元素b,那么可以使用a.b的方式访问元素。

2

变量为结构体指针。

如果变量a为结构体指针,且结构体内有元素b,那么可以使用a->b的方式访问元素。

需要注意的是,结构体最初为c语言的概念,c++继承了该类型并进行了扩展。在c++中,结构体与类(class)是相似的,元素同样可以设置属性,如果被设置为private属性,那么结构体成员函数和友元函数外的其它函数无法访问该元素。