Struct的作用:在网络协议,通信控制,嵌入式系统的C/C++的编程中,我们经常传送的不是简单字节流(char型数组),而是多种数据结合的一个整体,其表示形式是一个结构体。
定义初始化结构体与使用结构体指针
#include <stdio.h>
struct student
{
int num;
char *name;//name[20]
int age;
int sex;
};
int main()
{
struct student stu = {.num = 1,.name = "zhangsan",.age = 12,.sex = 'F'};
struct student *p_stu = &stu;
scanf("%d",&(stu.num));
scanf("%s",&(stu.name));
scanf("%s",&(p_stu->sex));
stu.num = 1;
stu.name = (char *)malloc(sizeof (char)* 100);
strcmp(stu.name,"zhangsan");
p_stu->num = 2;
p_stu->name ="lisi";
printf("%d\n",stu.num);
printf("%s\n",stu.name);
}
在结构体中还要注意内存空洞
#include <stdio.h>
struct node
{
char ch;
short num;
char ch1;
};
int main()
{
struct node p;
printf("sizeof(p) = %d\n",sizeof(p));
return 0;
}
在这个程序中占6个字节
#include <stdio.h>
struct node
{
char ch;
int num;
char ch1;
};
int main()
{
struct node p;
printf("sizeof(p) = %d\n",sizeof(p));
return 0;
}
在这个程序中字节却是12个;
从这里里总结出:
a 只要在结构体有大于等于4个字节的变量类型,那就以字划分
b 若在结构体中所有的变量类型都小于4个字节就以半个字节划分
但也存在特例
#include <stdio.h>
struct node
{
char ch;
short num;
char ch1;
int num1;
};
int main()
{
struct node p;
printf("sizeof(p) = %d\n",sizeof(p));
return 0;
}
如果按上面的总结方法这个为8个字节但实际为12个字节
结构体有大于等于4个字节的变量类型且
有这个结构char ch;
short num;
char ch1;
这个结构就占八个字节