Linux c 开发 - 结构体

时间:2022-01-22 11:16:23

实际的项目开发中,有比较复杂的数据结构。例如学生,有姓名、年龄等属性参数。这个时候使用传统的类型就无法满足我们的需要。C语言的结构体就可以解决这个问题。

1. 定义结构体

结构体都是通过关键字 struct 来定义。例如我们定义一个结构体,包含学生的姓名和年龄:

struct student {  
char *username;
int age;
};

struct为结构体的关键字。student为结构体的名称。


2. 结构体变量

结构体变量有多种方式定义。

1. 直接在结构体上定义。这种方式比较常用。

//定义一个结构体  
struct student {
char *username;
int age;
} s1, s2;

2. 直接说明结构变量。这种方法省了student,只能这几个变量用这个结构体,其它人就无法使用了。

//定义一个结构体  
struct {
char *username;
int age;
} s1, s2;

3. 先定义结构类型,再说明结构变量。

//定义一个结构体  
struct student {
char *username;
int age;
};
struct student s1;
struct student s2;

3. 结构体中带结构体

//定义一个结构体 
struct date {
int month;
int day;
int year;
};
struct student {
char *username;
int age;
struct date birthday;
};
struct student s1;
我们先定义了一个date的结构体,主要用来存储时间信息。

在student的结构体中,定义了date结构体的一个参数。这种情况就是结构体中带结构体,比较适合复杂的数据结构类型。


4. 结构体结构变量使用

结构体中的结构变量使用,一般通过. 点号。{结构体变量名称}.{结构变量}

例如:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <string.h>

//定义一个结构体
struct student {
char *username;
int age;
};


int main(void) {
struct student s1;
s1.username = "test";
s1.age = 100;
printf("结构体数据:用户名%s 用户年龄%d", s1.username, s1.age);
}


5. 结构体变量初始化

//初始化s1
struct student {
char *username;
int age;
} s1 = {"test", 100};


int main(void) {
printf("结构体数据:用户名%s 用户年龄%d", s1.username, s1.age);
}

6. 结构体数组

//初始化s1
struct student {
char *username;
int age;
};

int main(void) {
struct student s1[2]; //定义一个结构体数组
s1[0].username = "test";
s1[0].age = 100;
s1[1].username = "test2";
s1[1].age = 200;
printf("结构体数据:用户名%s 用户年龄%d\n", s1[0].username, s1[0].age);
printf("结构体数据:用户名%s 用户年龄%d", s1[1].username, s1[1].age);
}

7. 结构体指针

#include <stdio.h>  
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <string.h>

//定义一个结构体
struct student {
char *username;
int age;
};

int main(void) {
struct student *p = NULL; //定义一个结构体指针
p = (struct student *) malloc(sizeof(struct student)); //分配一个结构体内存,p指向这个内存地址
p->username = "zhuli";
p->age = 100;
printf("结构体数据:用户名%s 用户年龄%d", p->username, p->age);
}

8. 使用typedef来定义结构体

使用typedef来定义结构体的好处就是:

1. 不需要每次都写struct关键词

2. 更加形象的表达数据结构类型

typedef struct student STU;
struct student {
char *username;
int age;
};

int main(void) {
STU *p = NULL; //定义一个结构体指针
p = (STU *) malloc(sizeof(STU)); //分配一个结构体内存,p指向这个内存地址
p->username = "zhuli";
p->age = 100;
printf("结构体数据:用户名%s 用户年龄%d", p->username, p->age);
}