1.理解数组指针
数组指针是一个指针,指向的是一个数组
代码举例
#include<stdio.h>
int main()
{
int i = 0;
int arr[5] = { 0 };
for (i = 0; i < 5; i++)
{
arr[i] = i;
}
int(*p)[5] = &arr;
for (i = 0; i < 5; i++)
{
printf("%d ", *(*p + i));
}
return 0;
}
2.理解函数指针和定义
函数指针是指针,存放函数的地址,可以通过函数指针中存的地址找到对应地址的函数
代码举例:
#include<stdio.h>
void test()
{
printf("HELLO WORLD\n");
}
int main()
{
void (*p)() = &test;
(*p)();
return 0;
}
/*结果
HELLO WORLD
C:\Users\93983\source\repos\test\Debug\test.exe (进程 24256)已退出,代码为 0。
要在调试停止时自动关闭控制台,请启用“工具”->“选项”->“调试”->“调试停止时自动关闭控制台”。
按任意键关闭此窗口. . .
*/
3.理解函数指针数组和定义,转移表
函数指针数组是数组,数组内的元素是函数指针,函数指针是指针,存放函数的地址,可以通过函数指针中存的地址找到对应地址的函数
转移表就是函数指针数组,可以解决代码冗余问题,可用于两个操作数一个运算符的简单计算器
代码举例:
#include<stdio.h>
void test1()
{
printf("HELLO WORLD_1\n");
}
void test2()
{
printf("HELLO WORLD_2\n");
}
void test3()
{
printf("HELLO WORLD_3\n");
}
int main()
{
void (*arr[3])() = { &test1 ,&test2,&test3 };
int i = 0;
for (i = 0; i < 3; i++)
{
(*arr[i])();
}
return 0;
}
/*
HELLO WORLD_1
HELLO WORLD_2
HELLO WORLD_3
C:\Users\93983\source\repos\test\Debug\test.exe (进程 19244)已退出,代码为 0。
要在调试停止时自动关闭控制台,请启用“工具”->“选项”->“调试”->“调试停止时自动关闭控制台”。
按任意键关闭此窗口. . .
*/
4.理解指向函数指针数组的指针和定义
指向函数指针数组的指针是指针,存放的是函数指针数组的地址,函数指针数组是数组,存放的是函数指针的地址,函数指针是指针,存放的是函数的地址
代码举例
#include<stdio.h>
void test1()
{
printf("HELLO WORLD_1\n");
}
void test2()
{
printf("HELLO WORLD_2\n");
}
void test3()
{
printf("HELLO WORLD_3\n");
}
int main()
{
void (*p1)() = &test1;
void (*arr[3])() = { &test1 ,&test2,&test3 };
void (*(*p)[3])() = &arr;
int i = 0;
for (i = 0; i < 3; i++)
{
(*(*p)[i])();
}
return 0;
}
/*
HELLO WORLD_1
HELLO WORLD_2
HELLO WORLD_3
C:\Users\93983\source\repos\test\Debug\test.exe (进程 25336)已退出,代码为 0。
要在调试停止时自动关闭控制台,请启用“工具”->“选项”->“调试”->“调试停止时自动关闭控制台”。
按任意键关闭此窗口. . .
*/
5.理解回调函数的使用
回调函数可以减少代码冗余,回调函数的参数是函数指针
代码举例:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int Add(int x, int y)
{
return x + y;
}
int Sub(int x, int y)
{
return x - y;
}
int Calc(int (*pf)(int x, int y))
{
int x = 0;
int y = 0;
printf("输入操作数:");
scanf("%d %d", &x, &y);
printf("%d\n", pf(x, y));
}
int main()
{
int a, b;
char ch;
printf("请输入运算符:>");
scanf("%c",&ch);
switch (ch)
{
case '+':
Calc(Add);
break;
case '-':
Calc(Sub);
break;
default:
printf("输入错误\n");
break;
}
return 0;
}
6.练习使用qsort函数排序各种类型的数据。
7.模仿qsort的功能实现一个通用的冒泡排序。