结构体
结构体定义
结构体是用户自定义的一种数据类型,结构体中包含了一组相关的不同的数据类型。结构体的声明包括关键字 ‘struct’
比如:
struct student{
int student_id;
char student_name[30];
}; // 此处有分号,不能忽略
还有另外一种定义方法:
typedef struct student{
int student_id;
char student_name[30];
}student;
这个结构体语句定义了一个新的数据类型,叫做学生;它包含了两个成员,也可以理解为属性(property)。结构体的成员可以是任何一种数据类型,包括字符串,数组,指针,甚至可以是另外的结构体。
结构体声明
要来声明一个结构体的数据类型,需要使用结构体的标签,然后是变量名称
struct 机构体名 变量名;
比如:
struct student{
int student_id;
char student_name[30];
};
struct student s1;
结构体初始化和赋值
通过按顺序列出初始值的方法,结构体变量也可以初始化和赋值。
比如:
struct student s1 = {1320, "Andy"};
struct student s2 = {1321, "Keith"};
结构体具有结构体
结构体的成员也可以是可以是一个结构体
比如:
struct course{
int course_code;
char course_name[30];
};
struct student{
int student_id;
char student_name[30];
struct course c1;
};
结构体student中具有三个成员,student_id, student_name, c1.
指针与结构体
就像指针指向变量一样,指针也可以被定义来指向结构体。
定义一个指针来指向结构体:
struct structure *struct_pointer;
用指针来存储结构体成员的地址
struct_pointer = &struct_var;
访问结构体成员的值,使用地址操作符 ‘->’
struct_pointer->struct_member;
结构体作为函数参数
函数的参数可以使用结构体来接受传递的参数。
对于更改结构体变量中实际值的函数,需要指针参数。
比如:
#include <stdio.h>
typedef struct {
int student_id;
char *student_name;
}student;
void change_name(student *s1, char new_name[10]){
s1->student_name = new_name;
};
int main(){
student *s1;
s1->student_id = 1302;s1->student_name = "Andy";
printf("The old name is %s\n",s1->student_name);
change_name(s1,"Keith");
printf("The new name is %s\n",s1->student_name);
return 0;
};