结构体定义
C 数组允许定义可存储相同类型数据项的变量,结构体是 C 中另一种用户自定义的可用数据类型,它允许存储不同类型的数据项。
C语言中结构体数组的定义为:
struct 结构体名 {
成员1
成员2
...
};
其中结构体成员可以是基本类型(int a)、数组(int[] b)和结构体类型(struct BOOK book)。定义结构体还有这几种变形:
// 只定义结构体
struct PERSON {
char name[10];
int age;
int data[10];
};
// 定义结构体同时定义结构体变量
struct PERSON {
char name[10];
int age;
int data[10];
} person;
// 使用匿名结构体来定义一个结构体变量person
struct{
char name[10];
int age;
int data[10];
} person;
如果在定义结构体时创建了结构体变量,则可以直接进行初始化;否则需要创建结构体变量,可以使用下列语句创建。
struct PERSON person;
为了简化结构体变量的创建,还可以使用typedef关键字来创建结构体。
typedef struct PERSON {
char name[10];
int age;
int data[10];
} Person;
// 这种方式下,创建结构体变量就不需要加上“struct”。
Person person;
结构体初始化
在C语言中,结构体使用之前最好初始化,避免随机值。结构体变量的初始化有这几种方式:
(1)在定义结构体时初始化
struct PERSON {
char name[10];
int age;
int data[10];
} person = {"Tom", 18, {}}; // 这里使用{},默认data所有元素为0
使用大括号包裹初始化的值,如果结构体内部包含数组,则数组的元素需要同样使用大括号包裹。
typedef struct PERSON {
char name[10];
int age;
int data[10];
} Person;
Person person = {"Tom", 18, {}};
总的来说,统一赋值只能够在结构体变量定义时进行。
(2)定义完结构体变量后一个元素一个元素初始化(注:一个数组直接整体赋值给另一个数组会报错)
struct PERSON {
char name[10];
int age;
int data[10];
} person;
person.name[0] = 'T';
person.age = 18;
person.data[0] = 1;
// 如果需要整个数组赋值可以使用memcpy
memcpy(person.data, source_data, sizeof(source_data));