C++ 指针

声明

int *ipl,*ip2;  // ipl和 ip2 都是指向 int 型对象的指针
double dp,*dp2; // dp2是指向 double型对象的指针,dp是double 型对象

因为引用不是对象,没有实际地址,所以不能定义指向引用的指针。

指针值

指针的值(即地址)应属下列4种状态之一:

  1. 指向一个对象。
  2. 指向紧邻对象所占空间的下一个位置。
  3. 空指针,意味着指针没有指向任何对象。
  4. 无效指针,也就是上述情况之外的其他值。

试图拷贝或以其他方式访问无效指针的值都将引发错误。编译器并不负责检查此类错误,这一点和试图使用未经初始化的变量是一样的。访问无效指针的后果无法预计,因此程序员必须清楚任意给定的指针是否有效。

尽管第2种和第3种形式的指针是有效的,但其使用同样受到限制。显然这些指针没有指向任何具体对象,所以试图访问此类指针(假定的)对象的行为不被允许。如果这样做了,后果也无法预计。

空指针

一下都是空指针。

int *pl = nullptr; //等价于int *pl =0;
int *p2 = 0;  //直接将 p2初始化为字面常量 0
//需要首先#include cstdlib
int *p3=NULL; //等价于int *p3 =0;

建议初始化所有的指针,并且在可能的情况下,尽量等定义了对象之后再定义指向它的指针。如果实在不清楚指针应该指向何处,就把它初始化为 nullptr 或者 0, 这样程序就能检测并知道它没有指向任何具体的对象了。

指针操作

如果指针的值是0(nulptr),条件取false。任何非0(nulptr)指针对应的条件值都是 true。

指针相等(==)的情况,两个指针存放的地址值相同(两个指针相等)有三种可能:

  1. 它们都为空
  2. 都指向同一个对象
  3. 或者都指向了同一个对象的下一地址。

需要注意的是,一个指针指向某对象,同时另一个指针指向另外对象的下一地址,此时也有可能出现这两个指针值相同的情况,即指针相等。 // 另外一个指针的下一个对象,刚好指向同一个对象。

void *

void*指针能做的事儿比较有限:**拿它和别的指针比较、作为函数的输入或输出,或者赋给另外一个 void* 指针 **。

不能直接操作 void* 指针所指的对象,因为我们并不知道这个对象到底是什么类型,也就无法确定能在这个对象上做哪些操作。




《C++ Primer》 P50
posted @   double64  阅读(9)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
历史上的今天:
2022-09-12 C# WPF 联合 Halcon 环境测试:加载一张图片
点击右上角即可分享
微信分享提示