C语言结构体总结

本文没有提及结构体指针变量,另一篇对其进行了说明:戳这里
 

结构体类型的定义

struct 结构体名
{
    结构体成员表;(变量、指针、数组、结构体、共用体)
}

上面是定义的结构体类型,可以说是一个基础。
在定义结构体类型时,系统并不为结构体类型分配内存空间,只有当定义结构体类型的变量时,系统才为每一个变量分配相应的存储单元。

 

结构体变量的定义

方法一:
首先定义结构体类型,再用结构体类型定义变量

struct 结构名
{
    成员列表
}struct 结构名 变量名列表;
//在C++中,可以直接:结构名 变量名列表。省略“struct”

方法二:
定义结构体类型的同时定义结构体变量

struct 结构名
{
	……
}变量名列表;

方法三:
直接定义结构体变量(一次性使用)

struct 
{
    成员列表;
}变量名列表;

如果想要在别处定义变量,就必须将"struct{…}"这部分重写。

 

typedef和结构体

typedef struct 结构名
{
   成员列表;
}新名字;

这样,我们就可以用这个 “新名字” 命名结构体变量

typedef struct 结构名
{
   成员列表;
}新名字;
新名字 变量名;   //一个结构体变量

当然,我们也可以不写 “结构名”。这样也是正确的。

 

结构体变量的初始化

我们将一个结构体变量定义好时,就可以对其进行初始化了。
给出两种初始化方法,如下实例:

#include <stdio.h>
#include <stdlib.h>

//1.利用上文中的方法二定义结构体变量,并赋初值
struct Books{
	char title[50];
	char author[50];
	char subject[100];
	int book_id;
}book={"c语言","RUNOOB","编程语言",123456};

int main(int argc, char *argv[]) {
	
	//2.利用上文方法一定义结构体变量,并赋初值
	struct Books book2={"c++","c++作者","编程语言",6789};
	
	return 0;
}

实例给的两种方法是最常用到的。
当然,我们用定义结构体变量的方法三,并类似实例赋初值也是没有问题的。但就像上文强调的,这种用法只是一次性的。

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

【注】:直接访问结构体变量的成员,给其赋初值也可以。只是没有涉及到访问结构体变量的成员,所以暂且略过,下文会详细说到。

 

访问结构体变量的成员

如果用结构体定义了一个变量,那么结构体中的内容就是结构体变量的成员。那么我们该如何访问呢?

实例一:

#include <stdio.h>
#include <stdlib.h>

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

int main(int argc, char *argv[]) {
	
	printf("%s,%s,%s,%d",book.title,book.author,book.subject,book.book_id);
	
	return 0;
}

我们用 “结构体变量名 . 成员名” 就可访问。

上文提到,用这种方法可以为变量的成员赋值,看如下实例:

#include <stdio.h>
#include <stdlib.h>

struct{
	char title[50];
	char author[50];
	char subject[100];
	int book_id;
}book;

int main(int argc, char *argv[]) {
	
	strcpy(book.title,"c语言");
	strcpy(book.author,"RUNOOB");
	strcpy(book.subject,"编程语言");
	book.book_id=123456; 
	printf("%s,%s,%s,%d",book.title,book.author,book.subject,book.book_id);
	
	return 0;
}

 

结构体数组的定义

struct studnet
{
    ......
}struct student stud[5];

其实,结构体数组的定义和结构体变量的定义差不多,只不过这个变量时数组而已。所以定义结构体变量的方法,在这里也可以使用。

 

结构体数组的初始化

对于结构体数组,每一个数组元素都包含着结构体中的所有结构体成员。所以初始化时,要初始化到位。
如下面的例子:

struct Book{
	char title[50];
	int id;
}book[5]={	{"asdf",1},  //数组0号元素,包含着title、id,下面同理
			{"你好",2},
			{"kkkk",3},
			{"www",4},
			{"hhh",5}
};

我们定义了一个Book结构体,声明了book数组,并初始化。

初始化好之后,我们可以将值取出。
因为每个数组元素都包含所有的结构体成员,所以有以下取值方法:

printf("%s,%d",book[0].title,book[0].id);	

我们可以用访问成员变量的方法为其赋值

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值