指针是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个数组或者指针,只是我的一些拙见,有错误大神来帮忙。或者有上面问题欢迎留言,^_^。

对于 指针数组 数组指针 函数指针 函数指针数组 指向函数指针数组的指针 的简单理解相关推荐

  1. go 指针变量和普通变量的转化_C语言 | 指向结构体变量的指针变量

    "要成为绝世高手,并非一朝一夕,除非是天生武学奇才,但是这种人-万中无一" --包租婆这道理放在C语言学习上也一并受用.在编程方面有着天赋异禀的人毕竟是少数,我们大多数人想要从C语 ...

  2. 深入理解指针数组、数组指针、函数指针、函数指针数组、指向函数指针数组的指针

    指针数组 表达式为:int *p[5] 理解:下标运算符[ ]的优先级是要高于指针运算符*,因此p先和下标运算符结合,决定了p首先是个数组,其类型int *,表明数组的元素都是都是指针.而数组占多少个 ...

  3. 指针数组,数组指针,存放数组指针的数组,指向存放数组指针数组的指针,函数指针,函数指针数组,指向函数指针数组的指针

    数组: 一组数据的集合称为数组,它所包含的每一个数据叫做数组元素,例如 int a[4]: 它定义了一个长度为4的整型数组,名字是a . 一般的定义数组可以用 :数据类型 数组名 [数组长度]:来声明 ...

  4. C七:指向函数的指针 ------ 函数指针(function pointer)

    函数具有可赋值给指针的物理内存地址,一个函数的函数名就是一个指针,它指向函数的代码.一个函数的地址是该函数的进入点,也是调用函数的地址.函数的调用可以通过函数名,也可以通过指向函数的指针来调用.函数指 ...

  5. 指向函数的指针--转

    http://book.51cto.com/art/200908/146363.htm 5.1.2 指向函数的指针 C语言通过&和*操作符来操作数据的地址,但它并没有提供一个用一般的方式来操作 ...

  6. 指向函数的指针 ------ 函数指针(function pointer)

    函数具有可赋值给指针的物理内存地址,一个函数的函数名就是一个指针,它指向函数的代码.一个函数的地址是该函数的进入点,也是调用函数的地址.函数的调用可以通过函数名,也可以通过指向函数的指针来调用.函数指 ...

  7. 【数据结构基础】指向函数的指针

    文章目录 一.函数的指针 二.指向函数的指针变量 三.调用函数的两种方式 四.用指向函数的指针作函数参数(重点) 五.为什么要将指向函数的指针变量作为函数的形参(重点) 一.函数的指针 首先,函数名代 ...

  8. 20返回指针的函数与指向函数的指针

    一.返回指针的函数 指针也是C语言中的一种数据类型,因此一个函数的返回值肯定可以是指针类型的. 返回指针的函数的一般形式为:类型名 * 函数名(参数列表) 比如下面这个函数,返回一个指向char类型变 ...

  9. typedef 指向函数的指针

    对复杂变量建立一个类型别名的方法很简单,你只要在传统的变量声明表达式里用类型名替代变量名,然后把关键字typedef加在该语句的开头就行了. // 定义四个函数 int add(int, int); ...

  10. C语言中的指针应用,函数指针,指针函数,结构体中定义函数指针。

    指针函数 指针函数就是一个返回指针的函数,其本质是一个函数,该函数的返回值是一个指针. 声明一个指针函数 int* fun(int x,int y); 例子 typedef struct _Data{ ...

最新文章

  1. SpringBoot + Redis 分布式锁:模拟抢单
  2. 我偷偷监听了他们的通信流量......
  3. apue 2013-03-14
  4. 当我真正开始爱自己——查理·卓别林
  5. 二叉树经典题之从前序和中序遍历构建二叉树
  6. Error: listen EADDRINUSE: address already in use :::5000
  7. httpd-2.2部署Discuz!论坛系统、wordpress博客系统和phpMyAdmin程序
  8. 微信和QQ,终于可以互通了
  9. usb dongle android,在Android應用中使用libCEC + USB加密狗
  10. java 成神之路 (一)
  11. 神经网络中epoch、batch、batch_size、epoch、iteration理解
  12. Electron主进程渲染进程间通信的四种方式
  13. C语言学生管理系统项目
  14. Hadoop实战 一 WordCount
  15. GoJS滚动表格的使用
  16. Android调用跳转百度地图、高德地图、腾讯地图进行目的地导航
  17. PCBA加工中常见的两种焊接方式详解
  18. 2022-04-21 Omnet学习笔记(一)
  19. leetcode 594最长和谐子序列
  20. java swing输入框_Java开发笔记(一百二十九)Swing的输入框

热门文章

  1. Node.js:模块化思想中一个Javascript文件分析以及exports 和 module.exports的区别
  2. 设计模式(3)——装饰者模式
  3. 工作心得_在做算法工程师的道路上,你掌握了什么概念或技术使你感觉自我提升突飞猛进?
  4. 论文阅读笔记(三)——An Enhanced Hybrid MobileNet
  5. 网络中各层协议(7层)
  6. python人工智能爬虫系列:怎么查看python版本_电脑计算机编程入门教程自学
  7. 给Ionic写一个cordova(PhoneGap)插件
  8. EasyUi模糊匹配搜索框combobox
  9. eclipse中导入dtd文件实现xml的自动提示功能
  10. URAL - 1153 Supercomputer 大数开方