理解指针

高级指针

(1)指针数组

简单来说就是存放指针的一个数组,是数组

例如  int*arr[10]

 

(2)数组指针

就是指向数组的一个指针,是指针,例如*p ,int(*p)[10]

 

写了一段简单代码

int main()

{

int arr[10] = { 0 };

int(*p)[10] = &arr;

system("pause");

return 0;

}

&arr

 

p内容

 

p存放的是数组地址。

(3)函数指针

任何函数都是有地址的,自然也会有存放函数地址的指针,就是函数指针

函数名代表函数地址,证明如下:

 

 

(4)函数指针数组

先在字面上理解一下,存放函数指针的一个数组,也就是存放函数地址的数组,是数组。

int (*p[20])();

计算器的实现就是函数指针数组的实例

#define _CRT_SECURE_NO_WARNINGS 1

#include<stdio.h>

#include<windows.h>

int add(int a, int b)

{

return a + b;

}

int sub(int a, int b)

{

return a - b;

}

int mul(int a, int b)

{

return a * b;

}

int divi(int a, int b)

{

return a / b;

}

void menu()

{

printf("---------------------------------\n");

printf("------1.add         2.sub------\n ");

printf("------3.mul         4.div------\n ");

printf("---------------------------------\n");

printf("请选择:");

}

int main()

{

int x = 0;

int y = 0;

int input = 1;

int ret = 0;

char a[5] = { '0', '+', '-', '*', '/' };

int(*p[5])(int x, int y) = { 0, add, sub, mul, divi };  //定义一个函数指针数组存放函数地址

while (input)

{

menu();

scanf("%d", &input);

if (input == 0)break;

if (input > 0 && input < 5)

{

printf("请输入操作数:");

scanf("%d %d", &x, &y);

ret = (*p[input])(x, y);

 

}

else{

printf("输入错误!\n");

}

printf("%d %c %d = %d\n", x, a[input], y, ret);

}

system("pause");

return 0;

}

(5)指向函数指针数组的指针

这个指针指向一个函数指针数组,指针存放的内容是函数指针数组的地址,是指针。

Void(**p[10])()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值