读书人

请问怎样理解C++ Primer Plus 第6版 第

发布时间: 2013-10-22 16:16:51 作者: rapoo

请教怎样理解C++ Primer Plus 第6版 第102页第2行的这句话?谢谢
" 警告:一定要在对指针应用解除引用运算符(*)之前,将指针初始化为一个确定的、适当的地址。
这是关于使用指针的金科玉律"
[解决办法]
就是说指针要有有效的值,指向真正存在的类型正确的对象。
[解决办法]
这是为了防止内存越界,非法访问等错误.
[解决办法]

引用:
Quote: 引用:

就是说指针要有有效的值,指向真正存在的类型正确的对象。

"定要在对指针应用解除引用运算符(*)之前"
这话很拗口啊


拗口也许是翻译的问题,语言上的差异。
[解决办法]
引用:
Quote: 引用:

就是说指针要有有效的值,指向真正存在的类型正确的对象。

"定要在对指针应用解除引用运算符(*)之前"
这话很拗口啊

还是看原版吧。
作者想说的应该是
you need to make sure a pointer points to valid object before dereferencing the pointer to get access to the object.
[解决办法]
引用:
Quote: 引用:

就是说指针要有有效的值,指向真正存在的类型正确的对象。

"定要在对指针应用解除引用运算符(*)之前"
这话很拗口啊

不需要去太在意这些个翻译的东西,只要明白,
指针类型对象,必须是要有效的对象才行!
[解决办法]
不拗口的说法是
只能 * 一个已经指向有效对象的指针
[解决办法]
我来告诉你不同的东西;
我还没受过野指针访问内存的痛;
只是野指针,会让程序出错,而又不好找到错误处
[解决办法]
引用:
我来告诉你不同的东西;
我还没受过野指针访问内存的痛;
只是野指针,会让程序出错,而又不好找到错误处

++

没有初始化的指针,就是野指针,值是不确定。

对野指针使用 *运算符,就会出现莫名其妙的问题。
有时出错,有时不出错,有时出一些找不到原因的错误。

使用他会出现五花八门的错误。

分配内存后,又被释放了的指针,也就成了,野指针。


[解决办法]
告诉你的就是指针使用前必须指向合适的地方
[解决办法]
赋空
int *p=NULL;
char *q=nullptr;//c++11的写法

这样的话就可以避免指针指向内存中的随机地址,引起不可预知的错误
[解决办法]
这翻译的的确有点拗口。
符号&是取一个变量的地址,得到的是一个指针。简称取址
符号*是取一个指针指向的内存里的值。简称取值
那么这句话可以这样理解:当你要对一个指针进行取值操作的时候,前提是这个指针的确有指向一块确定的地址。
例如:int* p;//这个语句只是声明了一个指针p,并没有给p定义特定的指向的位置
如果接下来:*p = 2;//这个就有问题了。
而这样是ok的:int* p = new int;
*p = 2;
[解决办法]
就是指针在使用前必须指向一个合法地址,意思就是必须给指针变量赋值。
[解决办法]
其实电脑开机后物理内存的每个字节都是可读写的,区别仅在于操作系统内存管理模块在你读写时是否能发现并是否采取相应动作而已。操作系统管理内存的粒度不是字节而是页,一页通常为4KB。

ReadProcessMemory

[解决办法]
引用:
Quote: 引用:

Quote: 引用:

我来告诉你不同的东西;
我还没受过野指针访问内存的痛;
只是野指针,会让程序出错,而又不好找到错误处

++

没有初始化的指针,就是野指针,值是不确定。

对野指针使用 *运算符,就会出现莫名其妙的问题。
有时出错,有时不出错,有时出一些找不到原因的错误。

使用他会出现五花八门的错误。

分配内存后,又被释放了的指针,也就成了,野指针。


谢谢,你说的”对野指针使用 *运算符“ 这里 *运算符是啥意思啊?

就是解引用 就是取出指针所指向的内存所存储的数据
[解决办法]
这句话提醒你要注意指针指向的是什么东西。

读书人网 >C++

热点推荐