zoukankan      html  css  js  c++  java
  • 8指针2

    指针变量也是变量

    1. 深入理解:指针变量的类型

    int *p;
    

    根据 p 变量中的内容,我们可以找到一个存储区的首地址,然后再根据 p 的类型,就可以确定要取几个字节中的内容了。

    int a = 0x61626364;
    int *p = &a;
    char *q = (char *)&a;
    printf("%x %c
    ", *p, *q);
    

    这段上面代码中,p 和 q 同时指向了 a 变量的存储区。而取值 p 和取值 q 的结果,却截然不同。这是因为,取值 p 时,程序会从 p 所指向的首地址开始,取 4 个字节的内容作为数据内容进行解析,而取值 q 的时候,则是取 1 个字节的内容,作为数据内容进行解析。

    如图所示,p 变量对应了 a 变量整个存储区中的内容,所以输出取值 p 和 a 原本存储内容相同。而 q 变量由于是字符型指针变量,只能从首地址取到 1 个字节的内容,取到的就是 64,这里的 64 注意可是 16 进制的数字,对应到 10 进制数字就是 100,而 %c 是输出一个字符,数字 100 对应的字符就是英文小写字母 ‘d’。

    int a, *p = &a;
    char *q = &a;
    printf("%p %p", p, q);
    printf("%p %p", p + 1, q + 1);
    

    指针变量类型的第二个作用:在加法或者减法时,确定增加或者减少的地址长度。

    2. 指针变量与数组

    参与运算的是值,不是变量名!

    地址才是参与运算的值,指针只是存储地址值的变量,只是一个容器。所以,不是指针支持加减法操作,而是地址这种类型的值,支持加减法操作。

    从上图的等价表示中,你可能会自己推导出另外一种等价表示 *(p + 5) 等于 arr[5]。我希望你重视等价表示的学习,因为所谓等价表示,就是在写程序的时候,多种等价表示,写哪一种都一样。这就造成了,不同的编码习惯,会用不同的符号来完成程序,如果你不理解这些等价的表示方法,很有可能在看别人程序的过程中,就会出现看不懂的现象。

    3. 指针变量的大小

    类型就是指针变量的职业

    放到指针变量的概念里,那就是不管什么类型的指针,指针所改变不了的是其占用空间的存储大小,因为不管是什么类型的指针,存储的都是无差别的地址信息。

    小结

    1. 指针的类型,决定了指针取值时所取的字节数量。
    2. 指针的类型,决定了指针加减法过程中,所跨越的字节数量。
    3. 无论是什么类型的指针,大小都相等,因为地址信息是统一规格的。
  • 相关阅读:
    z470 装黑苹果 10.92
    Ubuntu 14.04安装Chromium浏览器并添加Flash插件Pepper Flash Player
    Jira 6.0.3 安装与破解
    Scrumworks乱码
    升级 CentOS git 1.7.1 到 1.7.12
    函数细说及匿名函数
    第四章—变量,作用域和内存问题(三)
    第四章—变量,作用域和内存问题(二)
    CSS-DOM的小知识(一)
    第三章——基本概念(三)
  • 原文地址:https://www.cnblogs.com/liugangjiayou/p/12609002.html
Copyright © 2011-2022 走看看