目录
- 介绍
- 背景
- 什么是指针?
- 什么是指向指针的指针?
- 悬空指针
- 指针从哪里开始?
- 局部变量和指针之间的差异
- 那么什么时候没有指针就不可能实现?
- 但是,有那么多神奇的智能指针!
- 什么是调用堆栈和堆栈溢出..
- 不能没有指针-案例1
- 不能没有指针-案例2
- 不能没有指针-案例3
- 不能没有指针-案例4
- 不能没有指针-案例5
- 不能没有指针-案例6
- 为什么指针如此强大
- 对象指针和功能指针之间的区别
- 按值传递参数
- 通过引用传递参数
- 兴趣点
介绍
指针是很多初学者的生死大敌,堪称c++的嘉峪关,在本文中,我将尝试阐明有关指针及其用法的某些要点, 希望对正在学习的你有所帮助。
背景
有时,在Web上,我会进行无数次有关C或C ++等语言的指针的讨论,关于使用指针是否值得甚至是明智的争论不断。 这个问题似乎一直持续到今天。 因此,希望澄清一些事情,我决定创建这篇文章。 我不会对这个问题过于熟练,也不会虔诚地要求每个人 new
必须具有相应的 delete
或每个人 malloc
必须具有相应的 free
。
本文适用于C和C ++,您除了处理原始指针外别无选择。 其他语言(例如Java,C#等)将所有的伏都教魔术隐藏在幕后。 它也适合那些不使用ASM,C或C ++编写代码但被主题迷惑的初学者。
我将尝试涵盖所有情况,而不会太深入技术细节。 如果您希望对指针有非常深入的技术知识,那么从Wikipedia到众多博客都可以找到很多信息。 cplusplus dot com网站上有一篇很棒的关于指针的文章,因此在这里我不再重复。 鉴于您正在使用C或C ++进行开发,因此我将在以下场景中进行介绍:
- 什么时候不使用指针就不可能实现某些东西
- 使用指针的优点
- 通过值,引用或指针传递变量
- 悬空指针
什么是指针?
指针是一个整数变量保持在所述特定的宽度(一个地址 float
, double
, int
, struct
, class
,等等)值被存储在计算机存储器中。 因此,指针是计算机在金属层上本机可以理解的“事实”对象。 指针始终是宽度为8、16、32、64、128等位的无符号整数。 这在很大程度上取决于CPU的主寄存器宽度。 它也由操作系统运行时位对齐指示。 完全有可能在64位CPU上运行16位OS,但反之亦然。 但是,在16位OS中,即使CPU为64位宽,您也将被限制在16位地址空间中。
旁记:由于64位寄存器的宽度足以满足上述16位OS的需要,因此可以编写一个特殊的分段内存管理器,该管理器可以窥视超过64Kb的限制,但前提是物理寄存器必须足够宽(哦,旧的16位Windows) )。 16位内存段和偏移量的主题在今天已经过时了。 在当前的讨论中,我仅针对平面内存。
指针的宽度与该指针可以容纳的可寻址内存直接相关,并且其宽度的乘幂为2减1。
通过查看此表,您可以看到过去和将来。
如果您要在sifi小说领域中醒来,首先要检查的是它们使用的计算机上的可寻址指针存储器,以了解您要处理的内容 。
当今的64位处理器中确实存在128位寄存器,通常用于SIMD(单指令多数据)操作码。 长话短说–它们允许并排加载四个32位整数到同一个寄存器中,并在一个CPU周期(赫兹)中执行多个指令,例如MulDiv等。 值得一看:1 EB等于一百万TB。
好。 那么什么是指向指针的指针?
指向指针的指针是一个整数变量,它保存