您的位置:首页 > 编程语言 > C语言/C++

【c语言】理解指针数组、数组指针、函数指针、函数指针数组、函数指针数组的指针

2018-06-22 16:12 295 查看

目录

1.指针数组
2.数组指针
3.函数指针
4.函数指针数组
5.函数指针数组的指针

一、指针数组

1.是一个存放指针的数组
2.举一个栗子

int  *arr[10];
char *arr2[4];
char **arr3[5];

二、数组指针

1.int (*p)[10];
解释:p先和*结合,说明p是一个指针变量,然后指针指向的是一个大小为10个整型的数组。所以p是一个指针,指向一个数组,叫数组指针。
注意:[ ]的优先级高于号,所以必须加上()来保证p先和结合。
2.举例

int arr[10] = {0};
int *p1 = arr;//数组首元素的地址
int (*p2)[10] = &arr; //数组的地址放在数组

3.一维数组传参

void test()
{
int arr[10]=0;
int *arr[20]=0;
print(arr);
print(arr2);
}
void print(int arr[])//对
{}
void print(int arr[10])//对
{}
void print(int *arr)//对
{}
void print(int *arr[20])//对
{}
void print(int **arr)//对
{}

4.二维数组传参

void test()
{
int arr[3][5]={0};
print(arr);
}
void print(int arr[3][5])//对
{}
void print(int arr[][5])//对
{}
void print(int (*arr)[5])//对
{}
void print(int arr[][])//错
{}
void print(int* arr[5])//错
{}
void print(int *arr)//错
{}
void print(int **arr)//错
{}

三、函数指针

1.存放函数地址的指针

void test()
{
printf("hehe\n");
}
void (*ptest)()=test;//函数指针,存放test函数的地址
//ptest先和*结合,说明ptest是指针,指针指向的是一个函数,执行的函数无参数,返回值类型为void1

2.代码1 ((void ()( )0))();
解释:void (*)( )是一个函数指针,把0强制类型转换成函数指针,整个代码的意思是调用0地址出的函数。
代码2 void (signal(int,void()(int)))(int);
解释:1. signal是一个函数声明
2. signal函数的参数有2个,第一个是int,
第二个是函数指针,该函数指针能够指向的函数有一个int参数, 返回类型为void
3. signal函数的返回类型为函数指针,该函数指针能够指向的函数有一个int参数,
返回类型为void。
简化代码2

typedef  void(*pfun_t)(int);//pfun_t是类型名
pfun_t signal(int,pfun_t);1

四、函数指针数组

1.把函数的地址存到一个数组中,这个数组就叫函数指针数组。

int *arr[10];//指针数组
int (*parr1[10])();//函数指针数组
//parr1先和[ ]结合,说明parr1是数组,数组的内容是int (*)()类型的指针1

2.用途:转移表
例如:计算器

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;
}

int main()
{
int (*p  )(int, int) = Add;
int (*p1[4])(int, int) = {Add, Su b, Mul, Div};//函数指针数组
return 0;
}

五、指向函数指针数组的指针

1.是一个指针,指针指向一个数组,数组的元素都是函数指针。
2.定义 

int (*p  )(int, int) = Add;//函数指针
int (*p1[4])(int, int) = {Add, Su b, Mul, Div};//函数指针的数组p1
int (*(*p2)[4])(int, int) =&p;//指向函数指针数组p1的指针p2
阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐