今天简单梳理一下结构体、共用体和指针
结构体(Struct)
结构体是一种用户定义的数据类型,它允许您组合不同类型的多个变量作为单一单元。这使得您可以创建更复杂的类型,比如一个“学生”结构体可以包含学生的姓名、年龄和成绩等信息。
定义结构体:
struct Student {
char name[50];
int age;
float score;
};
使用结构体:
struct Student student1 = {"John Doe", 20, 85.5};
printf("Name: %s, Age: %d, Score: %.1f\n", student1.name, student1.age, student1.score);
共用体(Union)
共用体也是一种用户定义的数据类型,但它与结构体的不同之处在于,共用体中的所有成员共享同一段内存位置。这意味着,您一次只能存储一个成员的值,而且一旦存储了一个新成员的值,之前成员的值就会被覆盖。
定义共用体:
union Data {
int i;
float f;
double d;
};
使用共用体:
union Data data;
data.i = 10;
printf("Integer value: %d\n", data.i);
data.d = 3.14;
printf("Double value: %lf\n", data.d);
指针(Pointer)
指针是一个变量,其值为另一个变量的内存地址,即该变量的位置。指针对于动态内存分配、函数参数传递以及数组操作等非常重要。
定义指针:
int *p; // 定义一个指向整型的指针
使用指针:
int x = 10;
p = &x; // p现在指向x的地址
printf("Value of x through pointer: %d\n", *p); // 输出x的值
结构体和共用体的指针
当您需要通过指针来访问结构体或共用体的成员时,可以定义指向这些复合类型的指针。
结构体指针示例:
struct Student *pStudent;
pStudent = &student1;
printf("Name: %s\n", (*pStudent).name); // 或者使用箭头操作符 pStudent->name
共用体指针示例:
union Data *pData;
pData = &data;
pData->i = 20;
printf("New Integer value: %d\n", pData->i);