C 语言结构体简介

结构体

没什么意思,随便放个图

声明

结构体有三个重要的组成部分,编写的规范见 结构体.菜鸟教程

  • 定义:你先存放多种数据,那我先把这些放到 {} 里,表示了结构体里有哪些变量
  • 变量:你想让谁是结构体?
  • 标签:这个结构体用完之后还要再写一遍不方便,我们把这个结构体保存下来

比如我们定义一下

//下面定义一个圆,所有圆都有这些属性,把他们全写在一起,就成了结构体:  
struct circle  
{  
    //圆的半径直径面积周长  
    float R;  
    float D;  
    float S;  
    float C;  
    //圆的范围(大还是小)  
    char *range;  
    //颜色  
    char *color;  
};  

//typedef可以给“struct circle”取一个别名,叫Circle,以后直接用Circle代替那两个单词。  
typedef struct circle Circle;  

//现在我想要2个圆  
Circle circle_1;  
Circle circle_2;  

存数据

前面是对结构体的声明,跟整型声明 int a 一样,都是声明,接下来我们存放数据。
整型很简单,直接 a = 1 ,但对具有多个变量的结构体来说,需要对每部分存放

//给圆赋属性
circle_1.R = 10;  
circle_1.D = 2*circle_1.R;  
circle_1.S = 3.14*circle_1.R*circle_1.R;  
circle_1.C = 3.14*circle_1.D;  
strcpy(circle_1.range, "large");  
strcpy(circle_1.color, "yellow");  
  
circle_2.R = 2;  
circle_2.D = 2*circle_1.R;  
circle_2.S = 3.14*circle_1.R*circle_1.R;  
circle_2.C = 3.14*circle_1.D;  
strcpy(circle_2.range, "small");  
strcpy(circle_2.color, "red");

这里的 . 实际上是访问成员的意思,本质上是先找到他,然后给它赋值
我们可以把这一步整合起来

circle_1 = (Circle){10, 2*circle_1.R, 3.14*circle_1.R*circle_1.R, 3.14*circle_1.D, "large", "yellow"}

我们还可以在一开始就初始化

struct Books
{
   char  title[50];
   char  author[50];
   char  subject[100];
   int   book_id;
} book_1 = {"C 语言", "RUNOOB", "编程语言", 123456};

还可以一次批量定义多个,我们把由结构体作为基本元素的数组叫结构数组。

struct address
{
        char name[30];
        /*姓名,字符数组作为结构体中的成员 */
        char street[40]; /*街道*/
        unsigned long tel; /*电话,无符号长整型作为结构体中的成员 */
        unsigned long zip; /*邮政编码*/
}student[3]={
{"Zhang","Road NO.1",111111,4444},
{"Wang"," Road NO.2",222222,5555},
{"Li"," Road NO.3",333333,6666}
};

指针

//定义一个指针(地址),指向一个结构体  
Circle* pcircle_1;  
//然后这个地址就是circle_1的地址。  
pcircle_1 = &circle_1;
//“.”符号就变成"->"符号了  
printf("circle_1的面积是%d\n",pcircle_1->S);

// 下面这个意思是,假如我想定义一个地址来存放结构,需要Circle* p;  
typedef struct circle  
{  
  
}Circle, *pCircle;  
  
但在上面结构大括号后加了一个*pCircle ,定义地址直接用pCircle p;

其他

结构体在程序中的位置要注意: 结构体的用法.CSDN

// enum定义结构体,可以包含多个数据
enum DAY
{
      MON=1, TUE, WED, THU, FRI, SAT, SUN
};

int main()
{
    enum DAY day;
    day = WED;
    printf("%d",day);
    return 0;
}

// typedef可以定义新的类型,比如布尔类型
typedef int BOOL;
#define True 1
#define False 0

BOOL bflag = True;
  • 9
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值