C语言的结构体与联合体
### 结构体
* 结构体中的属性长度会被自动补齐,这是为了方便指针位移运算
* 结构体中不能定义函数,可以定义函数指针
* 程序运行时,函数也是保存在内存中的,也有一个地址
* 结构体中只能定义变量
* 函数指针其实也是变量,它是指针变量
* 函数指针的定义 返回值类型(*变量名)(接收的参数);
* 函数指针的赋值: 函数指针只能指向跟它返回值和接收的参数相同的函数
#include<stdio.h>
#include<stdlib.h>
/**
c结构体 类似java的class struct来声明c的结构体
结构体的大小大于等于结构体中每一变量的占字节数的和
结构体的大小是最大的那个变量所占字节数的整数倍
C结构体中不能定义函数
函数指针的定义 返回值(*函数指针变量名字)(返回值);
-> 间接引用运算符
*/
void study(){
printf("good good study!\n");
}
typedef struct Student{
int age; //8
int score; // 4
char sex; //1
void(*studypointer)();
} stud;
main(){
stud stu = {18,100,'f'};
stu.studypointer = &study;
stu.studypointer();
struct Student* stuPointer = &stu;
printf("*stuPointer.age = %d\n",(*stuPointer).age);
(*stuPointer).sex ='m';
printf("stu.sex = %c\n",stu.sex);
printf("stuPointer->age = %d",stuPointer->age);
//printf("stu.age = %hd\n",stu.age);
//printf("stu.score = %d\n",stu.score);
//printf("stu.sex = %c\n",stu.sex);
// printf("结构体student占%d个字节\n",sizeof(stu));
system("pause");
}
### 联合体
* 长度等于联合体中定义的变量当中最长的那个
* 联合体只能保存一个变量的值
* 联合体共用同一块内存
#include<stdio.h>
#include<stdlib.h>
/**
联合体占字节数取决于 其中成员 占内存空间最大的那一个
*/
union u{
int num; //4
double d; //8
}
main(){
union u u1;
u1.num = 123;
u1.d = 123.456;
printf("union占%d个字节\n",sizeof(u1));
printf("u1.num = %d\n",u1.num);
system("pause");
}