1.voidp:p可以接受任意类型的地址。void类型的指针不能进行解引用操作。
2.指针数组: int p[5];是一个数组,每个元素是int
数组指针: int (*p)[5]:是一个指针,指向一个5个元素类型是int的数组。
函数指针:void (*p)(int,int):指向一个void类型参数 是(int,int)的函数。
3.
void add(int x, int y) {
printf("%d\n", x + y);
}
void del(int x, int y) {
printf("%d\n", x - y);
}
void mul(int x, int y) {
printf("%d\n", x * y);
}
void div(int x, int y) {
printf("%d\n", x / y);
}
void Cal(void (*p)(int,int)) {
int x = 0;
int y = 0;
printf("请输入2个数");
scanf("%d%d", &x,&y);
p(x,y);
}
int input = 0;
do
{
printf("请输入1个数");
scanf("%d", &input);
switch (input)
{
case 1:
Cal(add);
break;
case 2:
Cal(del);
break;
case 3:
Cal(mul);
break;
case 4:
Cal(div);
break;
default:
printf("输入错误");
break;
}
} while (input);
4.学习库函数qsort(数组地址,数组大小,数组元素大小,cmp(比较函数))排序任意数组类型。
!!注意cmp比较函数是规定写法:int cmp(const void* e1,const void* e2)。
例子qsort排序结构体:
typedef struct stuent
{
char name[20];
int age;
}stu;
int cmp(const void* e1, const void* e2) {
return ((stu*)e1)->age - ((stu*)e2)->age;
}
----------main
stu s[3] = { {"张三",22},{"李四",21},{"王五",20} };
int sz = sizeof(s) / sizeof(s[0]);
qsort(s, sz, sizeof(s[0]),cmp);
for (int i = 0; i < sz; i++)
{
printf("%s", s[i].name);
printf("%d\n", s[i].age);
}