#define _CRT_SECURE_NO_WARNINGS
#include<stdlib.h>
#include<string.h>
#include<stdio.h>
typedef struct Teacher
{
char name[64];
int age;
int id;
}teacher;
void printTeacher(teacher* array, int num)//数组做函数参数退化成指针
{
int i = 0; num = 3;
for (int i = 0; i < num; i++)
{
printf("age:%d\n", array[i].age);
}
}
void sortTeacher(teacher *array, int num)//按照年龄排序
{
int i, j;
teacher tmp;
for (int i = 0; i < num; i++)
{
for (j = i + 1; j < num; j++)
{
if (array[i].age > array[j].age)
{
tmp = array[i];
array[i] = array[j];
array[j] = tmp;
}
}
}
}
//在mallloc上分配内存
//void creatTeacher(int num) //改进:返回一个节点 因为teacher是一个复杂的数据类型 一开始就是个一级指针
teacher* creatTeacher01(int num)
{
teacher* tmp = NULL;
tmp = (teacher*)malloc(sizeof(teacher) * num);// teacher Array[3]
if (tmp == NULL)
{
return NULL;
}
return tmp;//return的方式把函数甩出来 在项目中经常指针做函数参数
//想被调用函数 在被调用函数里分配内存 相当于指针的输出 也就是说原来的指针是0 是NULL
//现在要改变指针的指向 ---传递指针给被调用函数(间接赋值是指针存在最意义)
}
int creatTeacher02(teacher **pT,int num)
{
teacher* tmp = NULL;
tmp = (teacher*)malloc(sizeof(teacher) * num);// teacher Array[3]
if (tmp == NULL)
{
return -1;
}
*pT = tmp;//二级指针形参去间接修改实参的值
return 0;//return的方式把函数甩出来 在项目中经常指针做函数参数
//想被调用函数 在被调用函数里分配内存 相当于指针的输出 也就是说原来的指针是0 是NULL
//现在要改变指针的指向 ---传递指针给被调用函数(间接赋值是指针存在最意义)
}
//free
void FreeTeacher(teacher* p)
{
if (p != NULL)
{
free(p);
}
}
void main()
{
int i = 0;
int ret = 0;
int num = 3;
teacher* pArray = NULL;
//creatTeacher(&pArray, num);
ret= creatTeacher02(&pArray, num);
if (ret != 0)
{
printf("func_creatTeacher02()er:%d\n", ret);
return ret;
}
printf("hello\n");
return;
}
指针要分配内存
一个老师带三个学生 学生挂到老师姓名之下 用到二级指针
可以malloc内存 或者二维数组