【结构体】c语言笔记

1 . 结构体的定义

结构体是一个集合,他将不同类型的数据(member)存放在一起,作为一个整体进行处理。

  • 定义结构体类型
struct book{
	char *name;
	int age;
	char class;
	int *a;
	char b[10];//member可为任意c数据结构,也可为另一结构体 
}; //分号不能少 

此结构体声明(book)仅作为一个描述模板,还未创建一个实际的数据对象
以下创建数据对象

  • 定义结构体变量

struct book one;
struct book two;
one two 都为一个可以使用book结构体的结构体变量,其内容与book模板内容一致

  • 初始化
struct book one={
	"chai",18,'a',2023,"healthy"	
}; 

整体初始化只能在定义结构体变量时,而后只能单个赋值

  • 访问member
    格式 :<结构体变量名>.<成员名>

如: one.name;

上面说的单个赋值

one.name=“chai”;

  • 输出
    结构体无法整体输出,只能对member进行访问单个输出

printf(“%s",“%d”,one.name,one.age);

  • 可以在定义结构体类型的同时定义结构体变量

格式
struct book {
}one;

  • 可以直接定义结构体变量

格式
struct {
}one;

注意:此时省略了模板的标记名book,所以这种结构体的定义是一次性的,无法被再次引用

  • 访问结构体中的结构体中的结构体…的成员
    上面说结构体中的member可以是另一结构体,所以要一路索引到结构体中的结构体中的结构体…的成员,就要

<结构体名>.<结构体中的结构体名>.<结构体中的结构体中的结构体名>…<最终成员名>;

2 . 结构体的整体赋值

对于为同一结构体模板的两个结构体,是可以整体赋值的,有如struct book
one和struct book two

two=one;

3 . 结构体与数组,指针

数组

  • 定义
    定义结构体类型后,定义一个数组 struct book c[10];
    c与[10]结合,c为数组名,此数组申请到十个单元(0到9)的struct book类型的结构体的内存
    每一单元都是一个struct book
  • 初始化
    在定义时整体赋值
struct book one[3]={
	{"chai",18,'a',2023,"healthy"	},
	{"lay",18,'a',2023,"healthy"	},
	{"pigpiece",18,'a',2023,"healthy"	}
}; 

花括号里面的花括号可以省略,每个member用逗号分隔
当对数组中全部元素赋值时,也可以不给出数组长度

  • 访问数组结构体的member

one[0].name; //chai
one[1].age;//18
one[2].b[2];//访问第二个单元中b的第2个字符,即a

指针

  • 定义
    struct book * two;
    同样的,two与*结合,是一个指针,指向的类型是一个book模型结构体
    two=&one;
  • 访问
    怎么通过two来取得one[1]的一个成员呢?
    有运算符->

two++;
two->name;
或(*two).name;

4 . 结构体与函数

可以把结构作为函数参数,传参方式与其他类型的变量或指针类似

void summ(struct book number){}//函数声明
struct books one;//
summ(one);

当调用函数summ时,会根据book模板创建一个自动变量number来接收one的值,所以当将结构体直接作为参数时只能访问不能修改
当要通过函数修改结构体时,可以通过指针传递地址

void summ(struct book *num){num->name="lay";}
struct books one;
summ(&one);

这样one中的name就被修改为lay
若想防止通过指针修改mamber的值,应将指针设置为const

5 . define和typedef

  • define
    一般格式为#define 宏名(参数表) 被替换的内容

define通过宏定义用一个符号常量来表示一个结构体类型;
#define b struct book
b {
int date;


};

  • typedef
    一般格式为;typedef 已有类型 新类型名;

用typedef定义新类型名来代替已有类型名,即给已有类型重新命名;
typedef int i; //i代替Int
typedef struct{
int date;

}book;//book代替了该结构体,并保有该模板
book one,two;

没了,其他下辈子再学

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值