10结构体
1.在C语言中可以使用结构体定义用户自己的数据类型,类似于数组,但是结构体中的成员可以是不同的数据类型。
struct 结构体类型名 变量名;
例如:
struct Student {
char name[128];
int age;
float score;
}; // 定义了一个名为Student的数据类型,该类型是一个结构,包括name、age、score三个成员
struct Student student; // 定义了一个名为student的变量,该变量是struct Student类型的
struct Student student2;
struct Student student3;
先用typedef定义结构体类型别名,再用该别名定义变量
typedef 原始类型 类型别名;
typedef unsigned int UINT;
UINT a; // 等价于unsigned int a;
typedef int BOOL;
typedef struct Student {
char name[128];
int age;
float score;
} STU;
STU student;
STU student2;
STU student3;
嵌套结构:一个结构体类型中的某个成员也是结构体类型的。例如:
struct Student {
char name[128];
int age;
float score;
struct Date {
int year;
int month;
int day;
} birthday;
};
2.结构型变量及数组的初始化
通过{}对结构型变量进行初始化s。
3.访问结构体的成员
1)通过变量访问成员:用.运算符,亦称成员访问运算符。
2)通过指针访问成员:用->运算符,亦称间接成员访问运算符。
4.结构类型的变量可以作为函数的参数,但是与基本类型参数的情况一样,虚实结合的过程只是值的复制,因此在函数内部对形参所做的修改,不会影响实参。如果希望函数能够改变实参的值,应该传入变量的地址。
5.即使是以读方式访问形参的函数,仅仅出于性能的考虑,也可以以地址方式传参,避免结构复制所带来的开销。为了防止在函数中意外地修改实参,可以用常量指针定义参数。
include <stdio.h> typedef struct Date { int year;//年 int month;//月 int day;//日 }DATE;//定义struct Date类型,及其别名为DATE,三个int成员 struct Student//st->birthday.year { char m_name[128];//姓名 int n_age;//年龄 DATE birthday;//出生时间 }sa={"习惯了",21,{1996,9,21}};//sa是结构体Student的变量。 typedef struct Student STU; void show(const STU *st) { printf("姓名:%s\n",st->m_name); printf("年龄:%d\n",st->n_age); printf("生日:%d年%d月%d日\n",st->birthday.year, st->birthday.month,st->birthday.day); } void grow(STU *st) { st->n_age++; } void main() { STU s4 = {"空城",18,{1996,10,5}}; //STU *ps = &s4; STU *ps; ps=&s4; grow(&s4); printf("%d\n",ps->n_age); printf("%s\n",sa.m_name); printf("%d\n",ps->birthday.year); show(&s4); STU *pt=&sa; show(&sa); }