吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 4059|回复: 5
收起左侧

[C&C++ 转载] 让你不再恐惧c中的指针之数组指针

  [复制链接]
lgh520 发表于 2019-10-19 19:34
如果你要问我C语言学得好不好的判断标准是什么,那就一定是指针,而指针的头号当属数组指针非常难以理解,我们常常看到书上写的什么整形指针就是指向整形的指针,字符指针就是指向字符的指针,那再接就是数组指针就是指向数组的指针,我去你的,你确定?我今天就不指向数组。
QQ截图20191019191151.png
你帮我看看我指向的是一个数组吗?我难道不可以指向一个整数吗?不仅如此我还可以正常取值。
image.png
今天我就换个角度来让大家学习指针,首先明确在汇编的世界里面是如何看待你的数的,比如int 4个字节,char 1个字节,short 2个字节,在它的眼里数除了宽度之分就是大小之分,在它眼里就是一堆二进制。
因此我就认为整形指针指向的就是一个4字节的指针,字符指针就是指向一个1字节的指针,所以数组指针就是指向特定宽度的一个指针,我想让你指向4个字节我就让你指向4个字节,我想让你指向100个字节都没问题,毕竟数组也是可以改变整体宽度的,*前面的类型仅仅是限定了这个指针指向的区域宽度罢了。
根据这般理论,我们就可以创建一个指向4*2宽度的指针对吧!
image.png
就像这样。现在他指向的区域就是8个字节,如何证明呢?打印一下就可以了
image.png
和猜想一致,既然如此我就可以随便安排一个8字节连续的内存空间给你指向,所以我就随便定义了两个int型的变量,如果你问我为啥不直接定义一个数组呢?当然是为了装b啊!当然不是啦!主要还是为了去推翻那些无知的定义罢了。
定义了两个int型的变量分别是1和2刚好足够8个字节,我们看看反汇编这两个数是怎么存储的吧!
image.png
他们存储是连续的且2在低地址1在高地址,这就是我为什么要取变量b的地址来只让数组指针指向的原因了!
最后通过*a1就得到了一个元素个数为2元素宽度为4字节的数组了,最后通过数组的方式来取值取到的第1个元素就是0,第2个元素就是1了。

免费评分

参与人数 4吾爱币 +4 热心值 +4 收起 理由
越行勤 + 1 我很赞同!
Zurdo + 1 + 1 谢谢@Thanks!
苏紫方璇 + 3 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
挑灯看花 + 1 用心讨论,共获提升!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

只为点滴幸福 发表于 2019-10-19 19:55
加油!加油
xiaosuobjsd 发表于 2019-10-19 20:08
不需要证明是8个字节。a1[2]是个整形数组,a1[0]就是4字节,a1[1]就是8字节,这是一个常识,不需要证明
z1036853215 发表于 2019-10-19 20:52
 楼主| lgh520 发表于 2019-10-19 23:37
xiaosuobjsd 发表于 2019-10-19 20:08
不需要证明是8个字节。a1[2]是个整形数组,a1[0]就是4字节,a1[1]就是8字节,这是一个常识,不需要证明

嗯,小提了一下而已
AA_BB_2AB 发表于 2021-4-2 16:00
谢谢,祝您身体健康!
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 18:17

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表