结构体
1.定义和初始化
struct Teacher
{
char name[32];
int age;
int id;
};
struct Teacher t1 = {"name", 54, 01}; //结构体类型 定义变量并初始化。
typedef struct Student
{
char name[32];
int age;
int id;
}Student;
Student t2;
t2 = {"name1", 22, 02}; //先定义变量,再进行初始化。
2.使用结构体
t1.name = "name2"; //第一种:通过寻址操作进行,寻址操作本身没有操作内存,赋值的时候才操作内存。
t1.age = 50;
Student *p = NULL; //第二种:通过指针间接赋值改变数据。
p = &t2;
p->name = "sduiso";
p->age = 20;
3.结构体做函数参数(结构体变量 PK 结构体指针)
结构体变量做函数参数修改的是的形参的值,和实参没有半毛钱关系;但是用结构体指针做函数参数时,修改的是实参本身。
typedef struct Teacher
{
char name[32];
int age;
int id;
}Teacher;
void copyTeacher(Teacher *to, Teacher *from)
{
*to = *from;
}
int main()
{
Teacher t1 = {"name", 54, 01};
Teacher t2;
Teacher t3;
t2 = t1;
printf("t2.name:%s\n", t2.name); name//c编译器支持结构体赋值操作
printf("t2.age:%d\n", t2.age); 54
copyTeacher(&t3, &t1); //传结构体指针当函数参数
printf("copyTeacher() after............\n");
printf("t3.name:%s\n", t3.name); name
printf("t3.age:%d\n", t3.age); 54
return 0;
}
4.结构体做函数基本操作
/*--------------------------------------------------------------------------------------*/
typedef struct Teacher
{
char name[32];
int age;
int id;
}Teacher;
Teacher * creatTeacher01(int num) //在堆上申请内存空间
{
Teacher * tmp = NULL;
tmp = (Teacher*)malloc(sizeof(Teacher) * num);
if (tmp == NULL)
{
printf("tmp malloc memory size fail.\n");
return NULL;
}
}
int creatTeacher02(Teacher **pT, int num) //二级指针,实参取地址传给形参(二级指针接一级指针),间接修改实参的值
{
int ret = 0;
Teacher * tmp = NULL;
tmp = (Teacher*)malloc(sizeof(Teacher) * num);
if (tmp == NULL)
{
ret = -1;
printf("tmp malloc memory size fail:%d\n", ret);
return ret;
}
*pT = tmp;
return ret;
}
void freeTeacher(Teacher *p) //释放内存
{
if (p != NULL)
{
free(p);
p = NULL;
}
}void printTeacher(Teacher *array, int num) //打印{ int i=0; for(i=0; i<num; i++) { printf("array[i].age:%d\n", array[i].age); }}void sortTeacher(Teacher *array, int num) //排序{ int i, j; Teacher tmp; for (i=0; i<num; i++) { for(j=0; j<num; j++) { if (array[i].age > array[j].age) { tmp.age = array[i].age; array[i].age = array[j].age; array[j].age = tmp.age; } } }}int main(){
int ret = 0;
int i = 0;
Teacher Array[3];
int num = 3;
Teacher *pArray = NULL;
//pArray = creatTeacher01(num);
ret = creatTeacher02(&pArray, num);
if (ret != 0)
{
printf("creatTeacher() return err:%d", ret);
return ret;
}
for(i=0; i<num; i++)
{
printf("Please input age:");
scanf("%d", &(pArray[i].age));
}
printTeacher(pArray, num);
sortTeacher(pArray, num);
printTeacher(pArray, num);
freeTeacher(pArray);
return 0;
}