C++ 指针的十点注意

原创
2012/07/01 20:09
阅读数 223

1. 指针策略是C++内存管理理念的核心,它将地址视为指定的量,而将值视为派生量。一种特殊类型的变量——指针——用于存储值的地址。因此,指针名表示的是地址。*操作符称为间接值或解除引用操作符,将其应用于指针,可以得到该地址处存储的值(这和乘法使用的符号相同;C++根据上下文来确定所指的是乘法还是解除引用)。

2. *操作符两边的空格是可选的。传统上,C程序员使用这种格式:

int *ptr;

这里强调*ptr是一个int类型的值。而很多C++程序员使用这种格式:

Int* ptr;

这里强调的是int*是一种类型,是指向int的指针。在哪里添加空格对于编译器来说是没有任何区别的。不过:

Int* ptr1,ptr2;

将创建一个指针(ptr1)和一个常规int变量(ptr2)。对于每个指针变量名,都需要使用一个*

3. 虽然指针指向的数据类型的长度可能不同,但指针变量本身的长度通常是相同的。

4. 指针的危险

极其重要的一点是:在C++中创建指针时,计算机将分配用来存储地址的内存,但不会分配用来存储指针所指向的数据的内存。为数据提供空间是一个独立的步骤,忽略这一步骤无疑是自找麻烦。

警告:一定要在对指针应用解除引用操作符(*)之前,将指针初始化为一个确定的、适当的地址。这是关于指针的金科玉律。

5. 要将数字值作为地址来使用,应通过强制类型转换将数字转换为适当的地址类型:

int* ptr;

ptr = (int*)0xB8000000;

6. 只能用delete来释放由new分配的内存。这并不意味着要使用用于new的指针,而是用于new的地址。不过,对空指针使用delete是安全的。

7. 可以修改指针的值,因为它是变量。但是不能修改数组名的值,因为数组名是常量。

8. 对数组名使用sizeof操作符得到的是数组的长度,而对指针应用sizeof得到的是指针的长度,即使指针指向的是一个数组。

9. 绝对不要对未被初始化为适当地址的指针解除引用。

10 cout 和多数 C++ 表达式中, char 数组名、指向 char 的指针以及用引号括起的字符串常量都被解释为字符串第一个字符的地址。
展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部