C语言:2026.1.19
一.数组指针
1.数组指针是一个指针变量,指向一个数组;
大小4/8
+1,跳过整个数组;
2.创建:
int arr[5];
int (p)[5]=&arr;
3.二维数组首元素地址是第一行数组的地址,类型是数组指针,int()[5];
4.数组指针解引用拿到的是数组;相当于拿到数组的数组名,首元素地址;
5.二维数组传参本质上传递的是第一行数组的地址,类型是数组指针类型,所以函数形式可以用二维数组接收,也可以用数组指针接收
6.int arr[3][5]
func(arr)传递的是首元素的地址,对于这个二维数组而言,首元素是第一行数组,首元素的地址,就是第一行数组的地址,int(p)[5];
在函数当中,对p+1跳过整个数组,p+1是第二行数组的地址,p是拿到p指向这个数组的数组名,也相当于拿到了这个数组的起始地址 +j解引用就是第j列元素;
int* arr[]={arr1,arr2,arr3};
func(arr);
传递的是首元素的地址,首元素是arr1 arr1是数组名,是起始地址,int类型,
首元素地址是int**p 起始传的是0下标的地址。
在函数当中,p拿到0下标的元素,是arr1 p+1是1下标的地址,(p+1)是1下标的元素, 是arr2 +j 解引用,拿到第j列的元素;
、、((arr+i)+j)====arr[i][j];
二.函数指针
1.函数名就是函数的地址,&函数名,也是拿到了函数的地址;
2.(1)函数的返回值(2)
test();-------1
void(P)()=&test;
(p)();-------2
p();----------3
3.对于有参数的函数来说,它的函数指针类型只需要表明每个参数的类型就可以不必写上形参的名字 int (p)(int int)=add;
4.函数指针数组:int (arr[])(int,int)={add,sub,mul,div};
5.函数回调 计算器
6. qsort()快速排序
void 无类型指针
sizt_t;无符号整型,
作业:
1.
(1)数组指针类型怎么写,怎么使用
数组指针是一个指针变量,指向一个数组;
大小4/8
+1,跳过整个数组;
创建:
int arr[5];
int (p)[5]=&arr;
(2)数组指针,指针数组 传递的谁,类型
int arr[3][5]
func(arr)传递的是首元素的地址,对于这个二维数组而言,首元素是第一行数组,首元素的地址,就是第一行数组的地址,int(p)[5];
在函数当中,对p+1跳过整个数组,p+1是第二行数组的地址,*p是拿到p指向这个数组的数组名,也相当于拿到了这个数组的起始地址 +j解引用就是第j列元素;
int* arr[]={arr1,arr2,arr3};
func(arr);
传递的是首元素的地址,首元素是arr1 arr1是数组名,是起始地址,int类型,
首元素地址是int**p 起始传的是0下标的地址。
在函数当中,p拿到0下标的元素,是arr1 p+1是1下标的地址,(p+1)是1下标的元素, 是arr2 +j 解引用,拿到第j列的元素;
2.函数指针 类型 怎么写,使用
test();-------1
void(P)()=&test;
(p)();-------2
p();----------3
对于有参数的函数来说,它的函数指针类型只需要表明每个参数的类型就可以不必写上形参的名字 int (p)(int int)=add;
3.函数指针数组,类型,
int (*arr[])(int,int)={add,sub,mul,div};
回调函数 使用一个计算器。
int add(int x, int y)
{
return x + y;
}
int sub(int x, int y)
{
return x - y;
}
int mul(int x, int y)
{
return x * y;
}
int div(int x, int y)
{
return x / y;
}
void calc(int(*p)(int, int))
{
int ret = 0;
int x, y;
printf("请输入两个操作数\n");
scanf("%d%d", &x, &y);
ret = p(x, y);
printf("ret = %d\n", ret);
}
int main()
{
int x=0, y=0, ret = 0;
int input=0;
do
{
printf("=\n");
printf("1:add 2:sub\n");
printf("3:mul 4:div\n");
printf("0:exit \n");
printf("=\n");
printf("请选择:\n");
scanf("%d", &input);
switch (input)
{
case 1:
calc(add);
break;
case 2:
calc(sub);
break;
case 3:
calc(mul);
break;
case 4:
calc(div);
break;
case 0:
printf("退出程序\n");
break;
default:
printf("输入错误\n");
break;
}
} while (input != 0);
return 0;
}
浙公网安备 33010602011771号