当前位置: 首页 > news >正文

C语言入门-更好地理解“指针”(1)

为啥要有指针?

正如宿舍楼的每间房间都有门牌号,指针就相当于内存里每个小空间的门牌号,有了它我们可以清楚地管理内存空间。

内存这栋宿舍楼被划分为了一间间的内存单元,每间内存单元的大小是1个字节。我们给每间内存单元编号,形成他们的地址,在C语言中给他叫做指针。

所以说指针的存在是为了让我们更好地管理内存。在C语言中,指针就是地址,地址就是指针

指针=地址=内存单元的编号

如何拿到指针?

&+变量名

例如:
int a=20; int* pa=&a;
这里pa是一个用来存放地址/指针的变量,叫做指针变量。
&a拿到的变量a的首地址(显示为一个16进制的数值)

逆操作:解引用指针

通过地址/指针,操作内存空间里存的东西
例如:
int a=20; int* pa=&a; *pa=200;
这里我们通过变量a的地址来改变了a存的数值

指针变量的大小:

×86环境下(32位平台)--指针占4字节(32个bit位)
×64环境下(64位平台)--指针占8字节(64个bit位)

不同的指针类型:

前面提到指针的大小是确定不变的,那么不同的类型会对指针产生什么影响呢?
影响的是:

对于不同类型的指针,在解引用指针操作的时候,我们可以访问的权限是不同的。

例如:对于int指针,解引用后可以访问4个字节;而char类型的指针,解引用后只可以访问1个字节。

指针+/-1:

int* pa: pa+1 相当于 +1×sizeof(int)
char* pa: pa+1 相当于 +1×sizeof(char)

void*无具体类型的指针:

可以用来接收任意类型的指针,不用管不同的类型;
BUT他不可以进行解引用操作,不能进行+1操作,非常有限。

http://www.sczhlp.com/news/9518/

相关文章:

  • 题解:P10194 [USACO24FEB] Milk Exchange G
  • 题解:P11233 [CSP-S 2024] 染色
  • 题解:P3637 方程组
  • 题解:12.14 模拟赛解题报告 神秘大矢
  • 半导体行业福音:跨网文件安全交换管理系统,守护数据安全!
  • zyc数论讲稿
  • 意念统御,军团集结!网易伏羲以科技重铸《魔兽世界》统御之盔,用意念“控制”机器人
  • (简记)概率 期望类 DP
  • JimuReport 积木报表 v2.1.2 版本发布,免费开源的可视化报表和大屏
  • 6.1.3 最大公约数
  • 在K8S中,创建Pod的流程是什么?
  • 6.1.5 质因数分解
  • 6.1.6 欧拉函数及其性质
  • 在K8S中,高可用集群架构是什么样?
  • 【转载】搞定SCI综述新方法!用ChatGPT 4o搭建框架、Claude 4撰写骨干内容,使用技巧和专业提示词文中获取直接用
  • freelook的参数
  • MySQL中为什么要使用索引合并(Index Merge)?
  • GBase8a设置开机自启动及开机自启动未生效问题排查
  • 深入了解酵母单杂交技术
  • 在K8S中,K8S集群外部,突然之间无法访问到Pod,排查思路是什么?
  • 周总结报告3
  • 专利相关
  • 产品经理如何判断需求的商业价值/优先级?
  • 第五届测量控制与仪器仪表国际学术会议(MCAI 2025)
  • java怎么统计每个项目下的每个类别的数据
  • LGP11369 [Ynoi 2024-R] 弥留之国的爱丽丝 学习笔记
  • 逻辑计算题
  • AT ARC191E Unfair Game
  • C#中简单Socket编程
  • Markdown博客格式