4月从零学习C语言(第23天)——结构类型_#include <stdio,Golang开发自学教程

25 阅读2分钟

{ struct date { int month; int day; int year; }; struct date today; today.month = 04; today.day = 23; today.year = 2022; printf("Today's date is %i-%i-%i.\n", today .year,today.month,today.day); return 0; }


运行结果:  
 ![在这里插入图片描述](https://p6-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/6734bf034a2f4eb89aa3e010f2bb0a5d~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5py65Zmo5a2m5Lmg5LmL5b-DQUk=:q75.awebp?rk3s=f64ab15b&x-expires=1772460926&x-signature=ppH3E1uSqgDmvS%2FfToua93wY4%2Fk%3D)在上面的代码中我们实现了复杂值的表达那么它用到了我们C语言当中的结构。


### 声明结构的形式


**形式1:**



struct point { int x; int y; }; struct point pl, p2;


pl和p2都是point里面有x和y的值


**形式2:**



struct { int x; int y; } pl,p2;


pl和p2都是一种无名结构,里面有x和y


**形式3:**



struct point { int x; int y; } pl,p2;


pl和p2都是point里面有x和y的值t


**注意:**  
 对于第一和第三种形式,都声明了结构point。但是第二种形式没有声明point,只是定义了两个变量


### 结构声明在函数内/外?


在一开始的例子中我们的结构是声明在函数里的那么它和本地变量一样,在函数内部声明的结构类型只能在函数内部使用。


那如果我们在函数外部生命呢?


看一下:



#include <stdio.h>

struct date { int month; int day; int year; };

int main(int argc,char const *argv[]) {

struct date today; today.month = 04; today.day = 23; today.year = 2022; printf("Today's date is %i-%i-%i.\n", today .year,today.month,today.day); return 0; }


运行结果:  
 ![在这里插入图片描述](https://p6-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/a9a1ef3f9ab84d1597a4ecdc115475bf~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5py65Zmo5a2m5Lmg5LmL5b-DQUk=:q75.awebp?rk3s=f64ab15b&x-expires=1772460926&x-signature=MVabCxWHBf66JK3BZ5Wu3p%2BeTHM%3D)  
 我们可以看到我们在函数外部声明结构依然可以使用,所以通常在函数外部声明结构类型,这样就可以被更多的函数所使用了。


### 结构的初始化


方式1:



#include <stdio.h>

struct date { int month; int day; int year; };

int main(int argc,char const *argv[]) {

struct date today = {07,31,2014};

printf("Today's date is %i-%i-%i.\n", today .year,today.month,today.day);

return 0; }


方式2:



#include <stdio.h>

struct date { int month; int day; int year; };

int main(int argc,char const *argv[]) { struct date thismonth = {.month=7 , .year=2014};

printf("This month is %i-%i-%i.\n", thismonth.year,thismonth.month,thismonth.day);

return 0;

img img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!