C语言——结构体

本文详细介绍了C语言中的结构体类型变量定义的四种方法,包括先声明后定义、声明同时定义、直接定义以及使用typedef定义。接着讨论了结构体数组的创建与成员赋值,并探讨了指向结构体类型数据的指针,包括指向结构体变量和结构体数组的指针的用法和成员访问方式。

结构体类型变量定义的几种方法

(1)先声明结构体类型,再定义结构体类型变量

1. 先声明结构体类型
//struct 结构体名{成员表列};
struct stu
{
	char name[10];
	char age;
	char sex;
};
2. 定义结构体类型变量
struct stu student1, student2

student1和student2都是struct stu类型变量,即他们都具有struct stu类型的结构。

(2)在声明类型的同时定义变量

struct stu
{
	char name[10];
	char age;
	char sex;
}stu1,stu2;

(3)直接定义结构体类型变量

struct
{
	char name[10];
	char age;
	char sex;
}stu1,stu2;

即不出现结构体名,但这样定义后,不能再定义其他的该结构体类型变量

(4)使用typedef定义结构体,即先声明一个结构体类型名,再用新类型名来定义变量。

  • 关于typedef
    typedef用来定义新的数据类型,一般形式为
typedef 类型名 标识符;

其中,“类型名”一定是在此语句之前已有定义的类型标识符。“标识符”是一个用户定义标识符,用来标识新的类型名。
如:

  1. 声明一个名为stu的结构体类型
//struct 结构体名{成员表列};
struct stu
{
	char name[10];
	char age;
	char sex;
};
  1. 给结构体起一个别名Node,此时Node就等价于struct stu
typedef struct stu Node;

或者直接把上面两个合起来写
3.

typedef struct stu
{
	char name[10];
	char age;
	char sex;
}Node;

结构体数组

说明:一个结构体变量中可以存放一组数据;如一个学生的学号、姓名、成绩等数据.如果有10个学生的数据需要参加运算显然应该用数组,这就是结构体数组(如果定义10个结构体变量太麻烦了)
结构体数组与以前介绍过的数值型数组不同之处:每个数组元素都是一个结构体类型的数据,它们都分别包括各个成员(分量)项

(1)一般形式为
struct 结构体变量名
{
	成员表列
}
数组名[常量表达式];
struct stu
{
	char name[10];
	char age;
	char sex;
}stu[2];

此时,定义了一个结构体类型struct stu型,用这样的结构体类型定义了一个结构体数组stu[2],该数组有两个元素,分别是stu[0],stu[1].

(2)给结构体数组中的成员赋值

结构体数组的引用

strcpy(stu[0].name, "xiaoming");
stu[0].age = 18;
stu[0].sex = "男"

指向结构体类型数据的指针

(1)指向结构体变量的指针

  • 首先声明一个结构体类型
//struct 结构体名{成员表列};
struct stu
{
	char name[10];
	char age;
	char sex;
};
  • 然后定义结构体变量
struct stu student1;
  • 声明结构体指针
struct stu *p;

该声明并未创建一个新的结构,但是指针p现在可以指向任意现有的stu类型的结构。例如,student1是一个stu类型的结构体变量,可以这样写:

  • 指针p指向结构体变量student1的首地址,即第一个成员的地址
p = &student1;

一个结构体变量的指针就是该结构体变量所占据的内存段的起始地址。结构体变量名并不是结构体的地址,不能把结构体名赋予该指针变量,是把结构体变量的首地址赋予该指针变量。因此要在结构体变量名前面加上&运算符。

  • 用指针引用结构体变量成员
    (*指针变量名).成员名

    指针变量名->成员名 (最常用的方式)

    结构体变量名.成员名

(2)指向结构体数组的指针

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值