指针数组
数组指针
函数指针
二维数组传参
函数指针传参
函数指针解引用,调用
指向函数指针的指针
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
/*
int main()
{
int arr[5];//arr是一个5个元素的整型数组
int* parr1[10];//parr1是一个数组,数组有10个元素,每个元素的类型都是int*,parr1是指针数组
int (*parr2)[10];//parr2是一个指针,该指针指向了一个数组,数组有10个元素,每个元素的类型是int,parr2是数组指针
int(*parr3[10])[5];//parr3是一个数组,该数组有10个元素,每个元素是一个数组指针,
//该数组指针指向的数组有5个元素,每个元素是int
//【】优先级更高
return 0;
}
*/
/*
//二维数组传参
void test(int arr[3][5])
{}
void test1(int arr[][5])//行可以省略
{}
void test2(int (*arr)[5])//传地址
{}
int main()
{
int arr[3][5] = {0};
test(arr);
test1(arr);
test2(arr);
return 0;
}
*/
/*
//二级指针传参
void test(int **p)
{}
int main()
{
int* ptr();
int** pp = &ptr;
test(&ptr);
test(pp);
int* arr[10];
test(arr);//指针数组也可以
return 0;
}
*/
/*
//函数指针
void Print(char* str)
{
printf("%s\n", str);
}
int main()
{
void (*p)(char*) = Print;
(*p)("hello bit");
return 0;
}
*/
/*
int Add(int x, int y)
{
int z = 0;
z = x + y;
return z;
}
int main()
{
int a = 10;
int b = 20;
//int ret = Add(a, b);
int(*pa)(int, int) = Add;
//printf("%d\n", ret);
printf("%d\n", pa(5,10));
printf("%d\n", (*pa)(5, 10));
return 0;
}
*/
int Add(int x, int y)
{
int z = 0;
z = x + y;
return z;
}
int Sub(int x, int y)
{
int z = 0;
z = x - y;
return z;
}
int Mul(int x, int y)
{
int z = 0;
z = x * y;
return z;
}
int Div(int x, int y)
{
int z = 0;
z = x / y;
return z;
}
int main()
{
int* arr[5];
//需要一个数组,这个数组可以存放4个函数的地址,函数指针的数组
int(*pa)(int, int) = Add;//也可以存放其他函数
int(*parr[4])(int, int) = { Add,Sub,Mul,Div };//函数指针的数组
int i = 0;
for (i = 0; i < 4; i++)
{
printf("%d\n", parr[i](5, 2));
}
return 0;
}