在分辨这些重要的概念时,我们先回顾一下前面所讲的C之三值合一,由于三个值所求出的地址是相同的,所以经常有传言说他们都是首元素的地址。这种说法是不正确的。为什么说它是不正确的呢?

首先定义一个指针,将三个值赋给它

*p=ar;

*p=&ar[0];

*p=&ar//出错

程序编译后在表达式*p=&ar时出错,说明ar并不是指针类型。ar是数组名代表的是整个空间,因此ar应该是数组指针。

这四个概念看起来很容易混淆,但实际上只需要记住再看这些概念的时候先看后两个字,就可以看出它的类型,如指针数组的本质是数组,指针函数的本质是函数,数组指针和函数指针的本质是指针。接着我们需要明白一点:括号的优先级大于*的优先级,明白这个有什么用呢?我们接着往下看:

Int (*p)[];

Int *p[];

Int (*p)();

Int *p();

上述四个定义式都很相似,但是他们所定义的都是不同的内容。首先看第一个式子和第二个式子,他们的相同点是都有方括号,这说明他们都与数组有关,而他们之间的区别好像只差一个括号,但其实不然,由于括号的优先级大于*,第一个式子的*与p结合,所以他是元素为*p的指针数组,而第二个式子的p先与[]结合,他的类型是int*因此它为数组指针。经过上面的分析,就能很容易的判断出来第三个式子定义的是指针函数,第四个式子是函数指针。

经过上面的分析我们总结一个分辨他们的小方法:有[]的为数组,有()的为函数,指针有括号为函数或数组,没有括号的为指针。

转载于:https://www.cnblogs.com/qingjiaowoxiaoxioashou/p/5683322.html

指针数组vs数组指针 指针函数vs函数指针相关推荐

  1. C++ 笔记(14)— 指针(指针声明、取地址、取值、new/delete、NULL指针、指针运算、指针数组、数组指针、指针传递给函数、从函数返回指针)

    1. 声明指针 指针是一个变量,其值为另一个变量的地址,即,内存位置的直接地址.就像其他变量或常量一样,您必须在使用指 针存储其他变量地址之前,对其进行声明. 指针变量声明的一般形式为: type * ...

  2. 指针数组,数组指针,指针函数,函数指针,二级指针详解

    先看个简单的:char *p,这定义了一个指针,指针指向的数据类型是字符型,char  *(p)定义了一个指针P: char *p[4], 为指针数组,由于[]的优先级高于*,所以p先和[]结合,p[ ...

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

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

  4. C-指针,二级指针,二维数组作为函数参数使用,C语言链表(详解)

    一级指针 int *p;            //表示定义一个int型(4字节)的指针p &p                 //表示p自身的地址位置 p                  ...

  5. 指针数组,数组指针,函数指针,main函数实质,二重指针,函数指针作为参数,泛型函数

     1.指针数组 数组里面的每个元素都是指针. 指针数组的案例如下: 易犯错误: 2.数组指针 归根结底还是指针,只是取*的时候能够取出一整个数组出来. 数组指针:(一个指针指向了数组,一般和二维数 ...

  6. 数组指针和指针数组,函数指针和指针函数,常量指针和指针常量,常量引用

    一.数组指针和指针数组 1.数组指针(行指针) 首先要知道数组指针是指向数组的指针.所以数组指针本质是个指针,只不过指向一个数组而已.格式为:T (*ptr)[]. 注意:"[]" ...

  7. 指针数组,数组指针,函数指针,main函数实质,二重指针,函数指针作为參数,泛型函数...

     1.指针数组 数组里面的每一个元素都是指针. 指针数组的案比例如以下: 易犯错误: 2.数组指针 归根结底还是指针,仅仅是取*的时候可以取出一整个数组出来. 数组指针:(一个指针指向了数组.一般 ...

  8. C语言程序设计 | 指针(二):常量指针和指针常量、数组参数和指针参数、函数指针数组

    指针的进阶(二)目录: 常量指针和指针常量 数组参数和指针参数 函数指针数组 常量指针和指针常量 在我们日常中,经常会用到一个关键字const const是一个C语言(ANSI C)的关键字,具有着举 ...

  9. 函数指针,指针函数,函数指针数组

    这是一个群友发的笔试题目,里面涉及的东西也比较有意思. 直接看代码 void (*f[])(char *) 这个是个什么东西? 我们先看看下面的东西 函数指针和指针函数的定义 我们看个代码 int * ...

  10. 指针数组和数组指针和函数指针

    文章目录 1.指针数组和数组指针 1.int *p1[10]; 2.int (*p2)[10]; 2.函数指针 char *(*fun1)(char * p1,char *p2) 函数指针的概念 函数 ...

最新文章

  1. GitHub标星近1万:只需5秒音源,这个网络就能实时“克隆”你的声音
  2. 服务器购买是有无系统,买服务器含不含操作系统
  3. spark读取文件源码分析-2
  4. mysql long raw_读取Oracle数据库中LONG RAW字段会抛出异常
  5. PostgreSQL 9.2迁移到9.3
  6. 2021银川Problem D. Farm(不保证正确性)
  7. 剑指offer_05
  8. 中国上海量子计算机,首台光量子计算机在上海亮相
  9. 数值运算pythonmopn_Python SciPy库——拟合与插值
  10. java线程池测试,Java线程池【测试Markdown样式】
  11. Java中ArrayList,Vector,LinkedList,HashMap,HashTable,HashSet对比及总结
  12. understand 4 for linux register key code 随意、任性拥有。。。。
  13. 基于模糊集的图像增强
  14. 电子电路基础 (4)——电阻的认识
  15. 当古典音乐遇上NFT
  16. 赛门铁克完成收购Blue Coat 重塑未来网络安全
  17. 计算机考试没考好检讨书免费,玩电脑检讨书精选范文
  18. uniapp,小程序返回到指定页面以及到指定页面左上角的房型默认返回首页
  19. 【转】手机充电器原理
  20. 什么是大数据?如何入门学习大数据?

热门文章

  1. android开发 解析 b5,张绍文android开发高手课读书笔记4-启动优化篇
  2. c语言高精度算法阶乘_学了这么久的C语言,原来可以这样解决算法问题...
  3. opencv怎么2个摄像头_扭到腰该怎么办?5个处理要点要谨记,2招教你预防扭伤
  4. 流放之路材质过滤怎么设置_用一张漫反射贴图可以做写实材质吗?
  5. 新疆师范大学计算机研究生值得读吗,研究生还值得读吗
  6. mac apache 日志_Mac OS X中的Apache日志文件并进行分析
  7. java静态接口方法使用_使用静态方法对接口进行Java编程
  8. java repl_Java REPL – jshell
  9. 教你前端面试技巧,教你如何涨薪!
  10. 苏宁:我们开发百度小程序遇到的那些“坑”