对于 指针数组 数组指针 函数指针 函数指针数组 指向函数指针数组的指针 的简单理解
指针是C语言的精华,所谓成也指针,败也指针。指针就是一把双刃剑,用的好,可以斩妖除魔,用的不好,也会伤了自己。废话不多,就一句话,指针很重要,我就来给大家说说数组和指针的一些小知识。有错误还请大神指点指点。
1.指针数组。
首先他是一个数组,那么数组中存的是指针,强调的是数组,数组,数组。重要的话说三遍。还有数组占多少字节由数组本身决定。他是“储存指针的数组”的简称。
2. 数组指针。
那现在清楚了,他是一个指针,他指向数组,强调的是指针,指针,指针。你懂得。这个指针是指向一个数组的,厉害吧。
那现在来几个代码看看:
int *p1[10]; //指针数组
int (*p2)[10]; //数组指针
有没有有点蒙啊,蒙就对了,那就继续往下看;这里需要明白一个符号之间的优先级的问题,“[ ]”
比“ * ”
的优先级要高,p1会先和“[ ]”
结合,构成一个数组,数组名为p1,int *
修饰的是数组的内容,即数组的元素。那么int *p1[10];
就清楚了,他是一个数组,存了10个指向int
数据类型的指针,即指针数组。
int (*p1)[10];
就更好解释了,在这儿()
的优先级比[]
的优先级高,那么 p2 先和*
结合,说明 p2 是一个指针,p2是指针变量名。int
修饰数组的内容,即数组的每个元素。数组在这里没有名字,是一个匿名数组,p2 是一个指针,它指向一个包含10个int
类型数据的数组,即数组指针。
还不清楚,别担心,有图有真相。
3. 函数指针。
既然明白数组指针是什么东西,那么函数指针也一定知道喽。首先老套路,他是一个指针,没毛病,好,指向的是一个函数,说不清楚,看代码:
char *(*fun)(char* p1, char* p2);
在给看个代码,会清晰很多。
int (*)[10] p;
这是什么?是不是定义的数组指针。
那么char* (*)(char* p1, char* p2) fun ;
是什么?是不是定义一个函数指针。这时,一个题外话(师爷,你给翻译翻译,什么是惊喜?)。我来告诉大家什么是 surprise 。这时一个函数指针,fun 是一个指针变量名,指向一个函数,这个函数有两个参数,分别为字符指针 p1 和字符指针 p2 ,这个函数的返回类型是 字符指针 类型。那么我们把代码写成char* (*)(char* p1, char* p2) fun ;
岂不是很好吗?的确很好,but 编译器不认,哈哈。
4. 函数指针数组。
我们现在已经知道表达式char* (*fun)(char* p1, char* p2) ;
定义的是一个函数指针 fun 。既然 fun 是一个指针,那么我们把它存在数组里好不好?不好也得好哈。看代码:char* (*fun[3])(char* p1, char* p2) ;
看出来多了什么吗?考察你的眼力。我在fun 后面加了一个 [3]
,现在就把这个代码变成了一个函数指针数组啦。有意思吧,来来来,来看我分析。
char* (*fun[3])(char* p1, char* p2) ;
他是一个数组,数组名是 fun 。数组中存了3个指向函数的指针。我把它变换一下 你在来看char* (*)(char* p1, char* p2) fun[3] ;
对吧,清晰了吧。这3个指向函数的指针指向 {一些返回类型为指向字符的指针、参数为一个指向字符的指针的函数}。我的天哪!不难哈。^_^。重点是要明白这时一个数组。
5. 函数指针数组的指针。
在忍忍,马上就可以看到胜利的曙光了,也不难嘛,这不就是一个指针嘛。这个指针指向一个数组,这个数组里面存的是指向函数的指针。看吧,我说的不难。
来来来,看代码:char* (*(*pf)[3])(char* p)
。把变量名写在后边,在来看代码:char* (*(*)[3])(char* p) pf
听我解释:pf 首先是一个指针,这个指针指向一个包含了3个元素的数组;这个数组里面存的是指向函数的指针;这些指针指向一些返回值类型为指向字符的指针、参数为一个指向字符的指针的函数。^_^。说的我都有点绕了,算了,你只要知道这是个指针就行。
上面的5个数组或者指针,只是我的一些拙见,有错误大神来帮忙。或者有上面问题欢迎留言,^_^。
对于 指针数组 数组指针 函数指针 函数指针数组 指向函数指针数组的指针 的简单理解相关推荐
- go 指针变量和普通变量的转化_C语言 | 指向结构体变量的指针变量
"要成为绝世高手,并非一朝一夕,除非是天生武学奇才,但是这种人-万中无一" --包租婆这道理放在C语言学习上也一并受用.在编程方面有着天赋异禀的人毕竟是少数,我们大多数人想要从C语 ...
- 深入理解指针数组、数组指针、函数指针、函数指针数组、指向函数指针数组的指针
指针数组 表达式为:int *p[5] 理解:下标运算符[ ]的优先级是要高于指针运算符*,因此p先和下标运算符结合,决定了p首先是个数组,其类型int *,表明数组的元素都是都是指针.而数组占多少个 ...
- 指针数组,数组指针,存放数组指针的数组,指向存放数组指针数组的指针,函数指针,函数指针数组,指向函数指针数组的指针
数组: 一组数据的集合称为数组,它所包含的每一个数据叫做数组元素,例如 int a[4]: 它定义了一个长度为4的整型数组,名字是a . 一般的定义数组可以用 :数据类型 数组名 [数组长度]:来声明 ...
- C七:指向函数的指针 ------ 函数指针(function pointer)
函数具有可赋值给指针的物理内存地址,一个函数的函数名就是一个指针,它指向函数的代码.一个函数的地址是该函数的进入点,也是调用函数的地址.函数的调用可以通过函数名,也可以通过指向函数的指针来调用.函数指 ...
- 指向函数的指针--转
http://book.51cto.com/art/200908/146363.htm 5.1.2 指向函数的指针 C语言通过&和*操作符来操作数据的地址,但它并没有提供一个用一般的方式来操作 ...
- 指向函数的指针 ------ 函数指针(function pointer)
函数具有可赋值给指针的物理内存地址,一个函数的函数名就是一个指针,它指向函数的代码.一个函数的地址是该函数的进入点,也是调用函数的地址.函数的调用可以通过函数名,也可以通过指向函数的指针来调用.函数指 ...
- 【数据结构基础】指向函数的指针
文章目录 一.函数的指针 二.指向函数的指针变量 三.调用函数的两种方式 四.用指向函数的指针作函数参数(重点) 五.为什么要将指向函数的指针变量作为函数的形参(重点) 一.函数的指针 首先,函数名代 ...
- 20返回指针的函数与指向函数的指针
一.返回指针的函数 指针也是C语言中的一种数据类型,因此一个函数的返回值肯定可以是指针类型的. 返回指针的函数的一般形式为:类型名 * 函数名(参数列表) 比如下面这个函数,返回一个指向char类型变 ...
- typedef 指向函数的指针
对复杂变量建立一个类型别名的方法很简单,你只要在传统的变量声明表达式里用类型名替代变量名,然后把关键字typedef加在该语句的开头就行了. // 定义四个函数 int add(int, int); ...
- C语言中的指针应用,函数指针,指针函数,结构体中定义函数指针。
指针函数 指针函数就是一个返回指针的函数,其本质是一个函数,该函数的返回值是一个指针. 声明一个指针函数 int* fun(int x,int y); 例子 typedef struct _Data{ ...
最新文章
- SpringBoot + Redis 分布式锁:模拟抢单
- 我偷偷监听了他们的通信流量......
- apue 2013-03-14
- 当我真正开始爱自己——查理·卓别林
- 二叉树经典题之从前序和中序遍历构建二叉树
- Error: listen EADDRINUSE: address already in use :::5000
- httpd-2.2部署Discuz!论坛系统、wordpress博客系统和phpMyAdmin程序
- 微信和QQ,终于可以互通了
- usb dongle android,在Android應用中使用libCEC + USB加密狗
- java 成神之路 (一)
- 神经网络中epoch、batch、batch_size、epoch、iteration理解
- Electron主进程渲染进程间通信的四种方式
- C语言学生管理系统项目
- Hadoop实战 一 WordCount
- GoJS滚动表格的使用
- Android调用跳转百度地图、高德地图、腾讯地图进行目的地导航
- PCBA加工中常见的两种焊接方式详解
- 2022-04-21 Omnet学习笔记(一)
- leetcode 594最长和谐子序列
- java swing输入框_Java开发笔记(一百二十九)Swing的输入框
热门文章
- Node.js:模块化思想中一个Javascript文件分析以及exports 和 module.exports的区别
- 设计模式(3)——装饰者模式
- 工作心得_在做算法工程师的道路上,你掌握了什么概念或技术使你感觉自我提升突飞猛进?
- 论文阅读笔记(三)——An Enhanced Hybrid MobileNet
- 网络中各层协议(7层)
- python人工智能爬虫系列:怎么查看python版本_电脑计算机编程入门教程自学
- 给Ionic写一个cordova(PhoneGap)插件
- EasyUi模糊匹配搜索框combobox
- eclipse中导入dtd文件实现xml的自动提示功能
- URAL - 1153 Supercomputer 大数开方