码迷,mamicode.com
首页 > 其他好文 > 详细

8指针2

时间:2020-03-31 22:31:52      阅读:69      评论:0      收藏:0      [点我收藏+]

标签:决定   字符   注意   变量类型   作用   har   程序   img   如图所示   

指针变量也是变量

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

int *p;

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

int a = 0x61626364;
int *p = &a;
char *q = (char *)&a;
printf("%x %c\n", *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. 无论是什么类型的指针,大小都相等,因为地址信息是统一规格的。

8指针2

标签:决定   字符   注意   变量类型   作用   har   程序   img   如图所示   

原文地址:https://www.cnblogs.com/liugangjiayou/p/12609002.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!