前言
在写这篇文章之前,说实话,自身对结构体的用法,只会两点——就是点访问式和指针式访问结构体内部成员。这对一个搞底层的工程师来讲,显然实在太low了。不妨读者看到这里,可以停下来思索一下,看看自己对c语言结构体掌握了多少。下面是我这几天结合自己的学习而总结的一篇算比较全的关于结构体的用法,欢迎大家来吐槽。
正文其实在之前的文章里面,我已经有说为啥在c语言里面要引入结构体这一概念——超详细的链表学习,这里的话,我就不再废话了,直接来点实际的。
一、结构体的各种使用方法(很全):
- 这里的话,我以实际例子直接开干,就不过多的介绍一些非常基础的东西(有没看明白的读者可以上网查)。
1# include
2# include
3
4struct Student {
5 char name[20];
6 float fScore[3];
7}student = {
"dire",98.5,89.0,93.5}; //初始化结构体变量
8
9
10void Display(struct Student *pStruct)11{
12 printf("------Information-------\n");
13 printf("Name:%s\n",pStruct->name);
14 printf("Chinese:%.2f\n",(*pStruct).fScore[0]);
15 printf("Math:%.2f\n",(*pStruct).fScore[1]);
16 printf("English:%.2f\n",pStruct->fScore[2]);
17}
18
19
20int main ()21{
22 Display(&student); //将结构体变量的首地址作为实参传入pStruct指针变量中
23
24 return 0;
25}
演示结果:
说明:
这里我们定义了一个结构体struct student ,并且定义了结构体变量student,同时为结构体各个成员赋值,然后定义了一个函数,这个函数传参里面定义了一个结构体变量;然后我们在主函数里面把结构体变量的地址作为函数形参传入到函数里面去;然后在函数里面进行一些操作,比如正如你所见一样,都是在访问结构体成员,而且是指针式的访问(书上把"->"叫做箭头操作符),这个正如我上面开头所说,很常见,但你细心的话, 你发现了一个(*pStruct).fScore[0] 居然也能够访问成功 (看到这里想必你平时可能就没怎么看到这种写法了吧,哈哈哈。),这种写法也是可以的,下次见到就不要见怪 了。b、再来看一个示例(结构体变量做形参):
1 #include
2 typedef struct A{
3 int a;
4 }s;
5 void fun(s b) 6 {
7 b.a=99;
8 printf("the b.a is %d\n",b.a);
9 }
10 int main(void)11 {
12