1、结构体本质相当于,自己定义了一个数据类型,数据类型的本质是固定大小内存块的别名。
2、.c和.cpp对结构体类型定义变量的编译处理行为不一样。在.c中少struct不可以。
3、结构体类型typedef
4、结构体变量内存按照四字节存放
5、结构体中嵌套的指针要使用,需要给指针进行赋值或者malloc。因为如果没有初始化结构体,那么结构体内嵌套的指针地址是不可操作的,可以认为是野指针。
6、结构体的子域必须是已定义内存大小的数据类型。
结构体变量做参数和结构体指针变量做参数不一样。
结构体变量做参数实参往形参传递参数的实质是“=”,赋值。
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct Teacher
{
char name[64];
int age;
char tile[128];
}Teacher;
int printtArray(struct Teacher *pArray, int count)
{
int i = 0;
for (i = 0; i < 4; i++)
{
printf("%d \n", pArray[i].age);
}
}
int sorttArray(struct Teacher *pArray, int count)
{
int i = 0,j=0;
struct Teacher tmp;
for (i = 0; i < 4; i++)
{
for (j = i + 1; j < count; j++)
{
if (pArray[i].age < pArray[j].age)
{
tmp= pArray[j];
pArray[j] = pArray[i];
pArray[i]= tmp;
}
}
}
}
void main()
{
int i = 0;
Teacher tArray[10];
Teacher *p = NULL;
for (i = 0; i < 4; i++)
{
int tmp = 0;
printf("输入age");
scanf("%d", &tArray[i].age);
}
printtArray(tArray,4);
printf("排序后:\n");
sorttArray(tArray, 4);
printtArray(tArray, 4);
system("pause");
}
5、注意结构体的浅copy和深copy
void copyObj03(struct AdvAdvTeacher *from, struct AdvAdvTeacher *to)
{
memcpy(to, from, sizeof(struct AdvAdvTeacher));//先浅copy
to->a_name = (char *)malloc(128);//后深copy
strcpy(to->a_name, from->a_name);
//然后把to指向的结构体给他分配空间后,再copy
void main()
{
struct AdvAdvTeacher t1;
struct AdvAdvTeacher t2;
t1.age = 11;
t1.a_name = (char *)malloc(100);
strcpy(t1.a_name, "t1111");
// {
// char *p = (char *)malloc(100);
// free(p);
// free(p);
// }
//t2 = t1; //编译器赋值操作 编译器等号=操作
copyObj03(&t1, &t2);
if (t1.a_name != NULL)
free(t1.a_name);
if (t2.a_name != NULL)
free(t2.a_name);
system("pause");
}