首先给出几种指针类型来作出区分,不看后面的解析如果可以自己分辨正确那么就算对指针有一个很好的掌握了,就没有必要再去看后面的解析,如果不能完全区分,那么就有必要仔细看看后面解析。

1 Char * p             2 char *p[10]      3 char(*p)[10]        4 char **p

5 char (*p) ( )           6 char *p( )       7 char(*p[10])( )     8 char(**p[10])( )

可能现在的你已经有些晕了,下面就来看看这些指针的含义,以及他们的内存布局:

1.char *p 没错他就是一个数据类型为字符型的指针,内存分配如下其中p存放的值实际上就是变量a的地址addr1,而指针变量也有它自己的内存地址为addr

2.char *p[10]  首先根据运算优先级可以判断其为数组(p[10])然后外面剩下数据类型我们令p[10]=x则变为 char *x;显然和情况1相同,所以说他是一个有十个元素的且每个元素都是char型指针类型的数组,简称指针数组。

3.char(*p)[10]  按照上面的分析方法,首先他是一个指针(*p)按照变量代换法令(*p)=x则变为char x[10],显然这就是一个数组,所以说他是一个指向含有10个元素的数组指针,一般用来指向二维数组,简称数组指针。

4 char **p 这个类型分两步看我们将其改造一下char *  (*p)现在应该很清楚了单看(*p)是指针类型用变量x代换,char *x很明显这是一个字符指针,所以原类型是指向指针的指针,简称二重指针.

5 char (*p) ( )   利用上面的变量代换char x(),易知他是函数指针,且该函数没有参数返回值类型为字符型

6  char *p( ) 很简单他是一个指向返回值为字符指针类型没有参数的指针变量。

7char(*p[10])( ) 这种指针比较复杂,不过采用分析优先级以及变量替换不难分析出其类型,首先从左往右先看括号里面的p[10]先结合用X换出变为char (*X)( ),这种类型不就是5中的情形吗所以得出结论他是一个有十个元素的每个元素都为函数指针的数组。

8指向有十个元素的每个元素都为函数指针的数组的指针

浅谈c/c++中的指针问题的更多相关文章

  1. 转: 浅谈C/C++中的指针和数组(二)

    转自:http://www.cnblogs.com/dolphin0520/archive/2011/11/09/2242419.html 浅谈C/C++中的指针和数组(二) 前面已经讨论了指针和数组 ...

  2. 转:浅谈C/C++中的指针和数组(一)

    再次读的时候实践了一下代码,结果和原文不一致 error C2372: 'p' : redefinition; different types of indirection 不同类型的间接寻址 /// ...

  3. 浅谈 Swift 2 中的 Objective-C 指针

    浅谈 Swift 2 中的 Objective-C 指针 2015-09-07  499 文章目录 1. 在 Swift 中读 C 指针 2. 在 Swift 中创建 C 指针 3. 总结 作者:Ja ...

  4. c#Winform程序调用app.config文件配置数据库连接字符串 SQL Server文章目录 浅谈SQL Server中统计对于查询的影响 有关索引的DMV SQL Server中的执行引擎入门 【译】表变量和临时表的比较 对于表列数据类型选择的一点思考 SQL Server复制入门(一)----复制简介 操作系统中的进程与线程

    c#Winform程序调用app.config文件配置数据库连接字符串 你新建winform项目的时候,会有一个app.config的配置文件,写在里面的<connectionStrings n ...

  5. 浅谈C++11中的多线程(三)

    摘要 本篇文章围绕以下几个问题展开: 进程和线程的区别 何为并发?C++中如何解决并发问题?C++中多线程的基本操作 浅谈C++11中的多线程(一) - 唯有自己强大 - 博客园 (cnblogs.c ...

  6. 浅谈C++11中的多线程(二)

    摘要 本篇文章围绕以下几个问题展开: 进程和线程的区别 何为并发?C++中如何解决并发问题?C++中多线程的基本操作 浅谈C++11中的多线程(一) - 唯有自己强大 - 博客园 (cnblogs.c ...

  7. 转载 浅谈C/C++中的static和extern关键字

    浅谈C/C++中的static和extern关键字 2011-04-21 16:57 海子 博客园 字号:T | T   static是C++中常用的修饰符,它被用来控制变量的存贮方式和可见性.ext ...

  8. 浅谈C语言中的强符号、弱符号、强引用和弱引用

    摘自http://www.jb51.net/article/56924.htm 浅谈C语言中的强符号.弱符号.强引用和弱引用 投稿:hebedich 字体:[增加 减小] 类型:转载 时间:2014- ...

  9. 【sql注入】浅谈sql注入中的Post注入

    [sql注入]浅谈sql注入中的Post注入 本文来源:i春秋学院 00x01在许多交流群中,我看见很多朋友对于post注入很是迷茫,曾几何,我也是这样,因为我们都被复杂化了,想的太辅助了所以导致现在 ...

随机推荐

  1. JAVA Debug 调试代码

    JAVA Debug 调试代码 1.什么时候使用Debug: 程序的运行结果,与你的预期结果不同时,Debug的目的是找错误,而不是该错误: 2.早期调试代码的方式就是打桩: System.out.p ...

  2. java中Mongo

    1.  query.fields().include("idfa").include("imei").include("id").inclu ...

  3. if __name__=="__main__": 这个结尾的理解

    print "别人应用我做为模块导入,就只看到我" if __name__=="__main__": print "自己文件执行就看到我输出" ...

  4. 十三 Thread的一些常用方法

    setName() : 给线程起名字. isAlive() : 线程是否存或. currentThread() : 取得当前线程. getId() : 取得线程的唯一标识.

  5. LeetCode题解 #8 String to Integer (atoi)

    又是一道恶心的简单题. 一开始没想到这么多情况的,幸好LeetCode是个很人性化的oj,能让你知道你在哪个case上错了,否则一辈子都过不了. 考虑不周到只能一个个补了. 列举一下恶心的case / ...

  6. [转] c# 的传递参数值传递与传递引用的区别,ref与out区别

    值传递 C#默认都是值传递的,就是复制变量的一个副本传递给方法,所以在退出方法后,对变量的修改无效. 但是要注意,当传递是引用类型时,因为引用类型是一个引用的地址,所以修改引用地址指向的对象时,一样会 ...

  7. 「小程序JAVA实战」小程序开发注册用户的接口(33)

    转自:https://idig8.com/2018/08/30/xiaochengxujavashizhanxiaochengxukaifazhuceyonghudejiekou33/ 从用户注册接口 ...

  8. 学习 Python 编程的 19 个资源 (转)

    学习 Python 编程的 19 个资源 2018-01-07 数据与算法之美 编译:wzhvictor,英文:codecondo segmentfault.com/a/119000000418731 ...

  9. python算法之归并排序

    归并排序 归并排序是采用分治法的一个非常典型的应用.归并排序的思想就是先递归分解数组,再合并数组. 将数组分解最小之后,然后合并两个有序数组,基本思路是比较两个数组的最前面的数,谁小就先取谁,取了后相 ...

  10. spring jpa 创建时间和更新时间自动更新

    @Entity @Table(name="RS_SIGNUPUSER") public class RsSignUpUser { @Id @GenericGenerator(nam ...