C语言之玩转结构体1——结构体定义与声明

在这里插入图片描述

一、前言

结构体作为C语言中的重要一环,可以用它来对数据进行封装,把一些相似的成员放在同一个结构体中,其对于代码的可维护性以及移植性等带来的好处不言而喻。

当结构体变量被定义后,其内部成员会被系统自动分配在一段地址连续的内存空间中,这使得我们的引用操作也变得方便许多。

一些同学在刚接触结构体时,容易对结构体的定义以及声明这块搞不清楚,下面我把结构体的声明和定义归类总结了一下,分享给大家。

二、名词解释

在C语言中,结构体(struct)指的是一种数据结构,是C语言中聚合数据类型(aggregate data type)的一类。结构体可以被声明为变量、指针或数组等,用以实现较复杂的数据结构。结构体同时也是一些元素的集合,这些元素称为结构体的成员(member),且这些成员可以为不同的类型。

简单来说就是:由一系列具有相同类型或不同类型的数据构成的数据集合,叫做结构体(struct)。

三、结构体声明

结构体声明一般是放在一个.h文件中,当需要定义结构体时,再include包含一下该头文件即可。
头文件代码如下:

#ifndef __STRUCT_DEMO_
#define __STRUCT_DEMO_

/** 结构体的几种声明方式:
  *  一、使用typedef来重命名结构体。
  */
typedef struct _student_t   //推荐,只声明结构体,不分配内存空间,需要用时另行定义 
{
  int age;
  unsigned char score;
  char *sex;  
}student1_t;

typedef struct         //结构体名称可以省略 
{
  int age;
  unsigned char score;
  char *sex;  
}student2_t;

/** 
  *  二、直接声明结构体 
  */

struct _student3_t   //推荐,只声明结构体,不分配内存空间,需要用时另行定义 
{
    int age;
  unsigned char score;
  char *sex;
};
 
struct _student4_t   //声明结构体的同时把变量也给定义了,会分配内存空间,不推荐 
{
    int age;
  unsigned char score;
  char *sex;
}stu4,stu5;

struct   //同理,结构体名称也可以省略 
{
    int age;
  unsigned char score;
  char *sex;
}stu6;

#endif

声明结构体是不占内存空间的,也不会生成变量,推荐在.h中对头文件进行声明。

四、结构体定义及初始化

在.c文件中对结构体变量进行定义

有几种定义方式,看代码:

#include "stdio.h" 
#include "struct_demo.h"

/** 结构体初始化的几种方式:
  *  
  */
student1_t student1 = {18,90,"boy"};   //1、定义时赋初值,需要按顺序填写 
student1_t student2 = {           //2、定义时赋初值,可以打乱顺序 
  .age = 19,
   .score = 95,
   .sex = "girl"
}; 
student1_t student3 = {           //3、定义时赋初值,可以打乱顺序 
  age : 19,
   score : 95,
   sex : "girl~"
}; 
//第四种方法是直接引用赋值,这里不再举例了。
int main()
{
  printf("%d,%d,%s\r\n",student1.age,student2.score,student3.sex);
  printf("%d,%d\r\n",stu4.age,stu6.score);  
  return 0;
}

五、运行

在这里插入图片描述

六、结语

如您在使用过程中有任何问题,请加QQ群进一步交流。

QQ交流群:906015840 (备注:物联网项目交流)。

获取资料:微信扫描下方二维码,关注公众号:一个物联网项目的前世今生。

静晨出品:静之所想,晨之所计
在这里插入图片描述

  • 1
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值