define 中若有常量会直接计算然后预编译时替换,如果有变量的话只会简单替换
如下测试程序

 #include<stdio.h>char arry1[]={1,11};char arry2[]={2,22};#define SWITCH_ARRY(X) ((X==0)?arry1:arry2)void display_arry(int id){printf("frist elem is %d\n",SWITCH_ARRY(id)[0]);}void display_arry2(int id){char *p;p=SWITCH_ARRY(id);printf("frist elem is %d\n",p[1]);}#define SWITCH_FUNC(X)((X==0)?display_arry:display_arry2)typedef void (*myfunc)(int id);myfunc fff1={display_arry,display_arry2};myfunc fff2={display_arry2,display_arry};#define SWITCH_FUNC_ARRY(X) ((X==0)?fff1:fff2)int main(int argc,char *argv[]){int id=(argv[1][0]-'0');int id2=0;printf("id=%d\n",id);id2=SWITCH_ARRY(id)[id];//可以这么用printf("id2=%d\n",id2);SWITCH_FUNC(id)[id];SWITCH_FUNC_ARRY(id)[id](id);//还可以这么用return 0;}

使用gcc -E define.c -o a.i
得到的预编译后的文件

 int main(int argc,char *argv[]){int id=(argv[1][0]-'0');int id2=0;printf("id=%d\n",id);id2=((id==0)?arry1:arry2)[id];//可以这么用printf("id2=%d\n",id2);((id==0)?display_arry:display_arry2)(id);((id==0)?fff1:fff2)[id](id);//还可以这么用return 0;}

gcc version 4.8.4 (Ubuntu 4.8.4-2ubuntu1~14.04.3)

gcc default.c
./a.out 1
shell结果:
id=1
id2=2
second elem is 22
first elem is 2

C语言define定义数组和函数指针相关推荐

  1. 【示例】C语言中利用数组存放函数指针

    C语言中利用数组存放函数指针,增加函数使用的灵活性.使用时只需提供数组索引,即可调用不同函数. 预备知识: 1.指向函数的指针 一个函数在编译时被分配一个入口地址,这个地址就被称为函数的指针. 例如: ...

  2. C语言学习笔记--预编译/宏定义/数组/参数传递/函数指针

    目录 预编译 值传递.指针传递.引用传递 数组 typedef 函数指针 预编译 预编译又叫预处理.预编译不是编译,而是编译前的处理.这个操作是在正式编译之前由系统自动完成的.#define 和 #i ...

  3. c语言数组宏定义标识符,C语言学习笔记--预编译/宏定义/数组/参数传递/函数指针...

    目录 预编译 值传递.指针传递.引用传递 数组 typedef 函数指针 预编译 预编译又叫预处理.预编译不是编译,而是编译前的处理.这个操作是在正式编译之前由系统自动完成的.#define 和 #i ...

  4. 【C 语言】指针 与 数组 ( 指针 | 数组 | 指针运算 | 数组访问方式 | 字符串 | 指针数组 | 数组指针 | 多维数组 | 多维指针 | 数组参数 | 函数指针 | 复杂指针解读)

    相关文章链接 : 1.[嵌入式开发]C语言 指针数组 多维数组 2.[嵌入式开发]C语言 命令行参数 函数指针 gdb调试 3.[嵌入式开发]C语言 结构体相关 的 函数 指针 数组 4.[嵌入式开发 ...

  5. C语言指针这一篇够了(一万二千字,包含指针与数组,函数指针等详解)

    目录 零.前言 一.指针的定义 二.指针类型的意义 1.指针类型决定了指针解引用时一次访问几个字节. 2.指针类型决定了指针加减整数时的步长 三.野指针 1.未初始化的指针 2.指针的越界访问 3.指 ...

  6. C语言 define 定义函数 - C语言零基础入门教程

    目录 一.define 简介 二.define 定义函数 1.define 定义不带参数的函数 2.define 定义带参数的函数 三.define 定义函数陷阱 1.define 函数陷阱一 2.d ...

  7. C语言 define 定义函数(多行书写) - C语言零基础入门教程

    目录 一.define 简介 二.define 定义多行函数 1.简单使用 2.经典案例 三.猜你喜欢 零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门 ...

  8. C语言指针数组,数组指针,函数指针,函数指针数组,函数指针数组的指针,回调函数

    C语言指针的一些知识点 指针 指针数组和数组指针的概念 函数指针,函数指针数组,函数指针数组的指针 回调函数 指针 1.指向对象的指针 int *p = new int(10); delete p; ...

  9. 图解C语言中数组指针、指针数组、函数指针、函数指针数组、指向函数指针数组的指针

    关于C语言中数组指针.函数指针.指针数组.函数指针数组.指向函数指针数组的指针一直比较绕,稍微整理一下. 到底是指针还是数组? 其实到底是指针还是数组还是看变量名与[]先结合还是*先结合.我们知道C语 ...

最新文章

  1. 各种编程语言的深度学习库整理
  2. PyTorch基础-猫狗分类实战-10
  3. Git笔记(4) 获取仓库
  4. 多目标跟踪(MOT)最新综述,一文快速入门
  5. 单件模式的两个简单实例
  6. java24小时运行一次_使用crontab每分钟执行一次脚本,每24小时执行一次脚本[关闭]...
  7. php的数组操作,PHP的数组操作
  8. 河流淹没分析_【专题归纳】关于河流地貌的知识点整理!附中国十二条著名江河名称的由来...
  9. cs5 安装报错解决
  10. Android获取系统相册图片选中地址,获取手机中的所有图片地址自定义相册
  11. echarts地图城市坐标
  12. 2020电工(初级)考试题及电工(初级)模拟考试系统
  13. 【渗透测试】锐捷网络-EWEB网管系统易网关批量GetShell
  14. paper 43 :ENDNOTE下载及使用方法简介
  15. c++实现两有序链表合并成一个新的有序链表
  16. 跑 Dimp 测试的一些记录
  17. 记录一次华为CE6800和华三S6800交换机BFD对接配置
  18. C++坑人游戏(加更)
  19. Ubuntu安装Imagick - 益达915 - 博客园
  20. ChromeDriver与Chrome版本对应关系

热门文章

  1. 雷达原理雷达方程思考题及答案
  2. c语言中定义结构体指针并指向一片内存空间和直接定义一个结构体变量的区别 Node *p=(Node *)malloc(sizeof(Node)); 和 Node p 两个有什么区别??? Node是一
  3. 清华计算机系旁听有感
  4. c语言判断框是,判断单选按钮和复选框是否被选中
  5. 漫步数学分析三——开集
  6. 彻底告别加解密模块代码拷贝-JCE核心Cipher详解
  7. 把bib文件转换成latex中的bibitem的方法
  8. 小说app搭建—小说app运营选择付费模式还是免费模式?
  9. [附源码]计算机毕业设计Q宝商城Springboot程序
  10. 城市突发安全事故,应急联动指挥系统如何有效解决?