结构体-C

mac2026-04-09  2

结构体定义

数组(Array),它是一组具有相同类型的数据的集合。但在实际的编程过程中,我们往往还需要一组类型不同的数据,例如对于学生信息登记表,姓名为字符串,学号为整数,年龄为整数...因为数据类型不同,显然不能用一个数组来存放。

结构体可自定义数据类型,类似int, long, 当结构体定义完成,就可以像用内置类型一样的使用         

结构体普通变量通过"·"访问其成员         结构体指针变量通过"->"访问其成员

在C语言中,可以使用结构体(Struct)来存放一组不同类型的数据。结构体的定义形式为:

struct Student { char name[20]; int age; }student;

如此定义有一个小缺点,在使用结构体定义变量时,总需要加上关键字struct,如

struct Student stu = {"liubei",23};

对于这个问题我们可以通过使用typedef来解决。

 


typedef:

类型定义  typedef 旧类型名  新类型名(别名)

小技巧: 首先去掉typedef,确定是定义一个什么变量,然后加上typedef,其就由变量提升成为数据类型

typedef unsigned long long int uint64;//64位 typedef int Arr[10];//定义一个长度为十的整型数组的类型 typedef int * Pint;//整形指针 类型 typedef int (*P)[4];//指针指向一个一维数组 的类型

如上面的学生信息结构体,我们可以在结构体定义前加上typedef struct Student Student;

但将二者合二为一是更好的办法:

typedef struct Student { char name[20]; int age; struct Date bir;//结构体嵌套 }student; typedef struct Date { int year; int mon; int day; }Date;

以后可以不再用struct,如

Student stu = {"liubei",23};

stu.bir.year = 1990;

定义一个结构体指针:

Student *ps = &stu;

通过ps改成5月3日    ps->bir.mon = 5;     ps->bir.day = 3;

定义一个结构体数组:

Student arr[] = {{"liubei",23},{"sunquan",18},{"caocao",24}};

代码示例

#include <stdio.h> #include <stdlib.h> typedef struct Student { char name[20]; int age; }student; //输出arr数据 void Show(const Student *arr,int len) { for(int i = 0;i<len;i++) { printf("%s,%d\n",arr[i].name,arr[i].age); } } int main() { Student stu = {"liubei",23}; Student *ps = &stu; Student arr[] = {"liubei",23,"sunquan",18,"caocao",24}; //将刘备年龄改为25 arr[0].age = 25; printf("%d\n",arr[0].age); //将数组arr的数据全部输出 Show(arr,sizeof(arr)/sizeof(arr[0])); return 0; } 结构体传参时,一定是传递指针(节省空间)聚合类型(数组,结构体):如果只初始化一部分,则剩余部分为0
最新回复(0)