* C语言指针相关理解 *

1.指针数组

     指针数组是数组,是一个存放指针的数组。

         int *a[10]

     因为’[ ]’的优先级高于’*’,所以上式是一个数组,一个含有10个元素的数组。元素的类型是int *型,所以上式是一个具有10个整形指针数组元素的数组。

2.数组指针

    数组指针是指针。

        int (*a)[10]

    a先和*结合,说明a是一个指针变量,指向的是一个大小为10个整型的数组。所以a是一个指针,指向一个数组,叫数组指针。

3.函数指针

   void (*pfun1)();

      pfun1可以存放。pfun1先和*结合,说明pfun1是指针,指针指向的是一个函数,指向的函数无参数,返回值类型为void。

例:

(*(void (*)())0)();   //函数声明

void (*signal(int , void(*)(int)))(int);   //函数调用

4.函数指针数组

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

      int (*parr1[10]])();

    parr1 先和 [] 结合,说明parr1是数组,而数组的内容是 int (*)() 类型的函数指针。所以parr1就是一个函数指针数组。


例:函数指针数组实现简易计算器

#include <stdio.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 div(int a, int b)
{
return a / b;
}
int main()
{
int x, y;
int input = 1;
int ret = 0;
int(*p[5])(int x, int y) = { 0, add, sub, mul, div }; //转移表
while (input)
{
printf( "*************************\n" );
printf( " 1:add 2:sub \n" );
printf( " 3:mul 4:div \n" );
printf( "*************************\n" );
printf( "请选择:" );
scanf( "%d", &input);
if ((input < 4 && input > 1))
{
printf( "输入操作数:" );
scanf( "%d %d", &x, &y);
ret = (*p[input])(x, y);
}
else
printf( "输入有误\n" );
printf( "ret = %d\n", ret);
}
return 0;
}
5.指向函数指针数组的指针

     指向函数指针数组的指针是一个指针。该指针指向一个数组,数组的元素都是函数指针。

例:

void test(const char* str)
{
printf("%s\n", str);
}
int main()
{
void (*pfun)(const char*) = test;   //函数指针pfun
void (*pfunArr[5])(const char* str);   //函数指针数组pfunArr
pfunArr[0] = test;   
void (*(*ppfunArr)[10])(const char*) = &pfunArr;  //指向函数指针数组pfunArr的指针ppfunArr
return 0;
}


 

                
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值