C+;中char*const指向的更改数据中的访问冲突+; 我是读Steve Qualine的C++黑客,它写的是: char *const ptr;//statement 1

C+;中char*const指向的更改数据中的访问冲突+; 我是读Steve Qualine的C++黑客,它写的是: char *const ptr;//statement 1,c++,C++,指针不受const关键字的影响,以下是合法的 *ptr = 'S';//statement 2 但是当我写上面的代码时,语句1本身给了我一个错误,说指针必须初始化,当我初始化它时,语句2给了我访问冲突 我缺少什么?我在Visual Studio 2013上运行了它。如果要创建变量char*const ptr,需要在声明时准备好内存,以便它指向。这是因为指针(与其指向的内存相反)是常量,必须设置为声明 这与常量字符*相反,在常量字符*中,指向的内存是常量,但指针不是常量,因此可以将其更改为指向内

指针不受const关键字的影响,以下是合法的

*ptr = 'S';//statement 2
但是当我写上面的代码时,
语句1
本身给了我一个错误,说指针必须初始化,当我初始化它时,
语句2
给了我访问冲突


我缺少什么?我在Visual Studio 2013上运行了它。

如果要创建变量
char*const ptr
,需要在声明时准备好内存,以便它指向。这是因为指针(与其指向的内存相反)是常量,必须设置为声明

这与
常量字符*
相反,在
常量字符*
中,指向的内存是常量,但指针不是常量,因此可以将其更改为指向内存中
常量字符
的不同区域,但不能更改其指向的内存

考虑以下代码段:

char buf[16] = "Hello World";
char *const ptr = buf;        // ptr and buf both point to "Hello World".
*ptr = 'J';                   // ptr and buf now point to "Jello World"
ptr = "Another string";       // Error, cannot assign to a variable that is const

const char *cptr = buf;       // cptr points to "Jello World".
*cptr = 'H';                  // Error, cannot assign to a variable that is const
cptr = "Another string";      // cptr now points to "Another string".

您初始化指针了吗?如何初始化指针?如果不初始化指针,它将要么是空指针(如果变量在全局范围内声明),要么具有不确定(且不变)值(如果是局部变量)。这两种情况都会导致未定义的行为。请向我们展示您的代码。你把指针指向了什么?如果你让它指向一个常量,当然你不能改变它指向的内容,“当我初始化它的时候”。如果书中真的说了
char*constptr,那么这本书是错的,但为什么在书中没有给出初始值?我对那本书不熟悉,所以无法评论作者的意图。当你说我的方法有效时,你是说这段代码可以为你编译吗?因为它不是用Visual Studio 2015或GCC 4.9.2为我编译的(由于注释中描述的错误)。@我的意思是现在*ptr='J'没有给出错误。那一行不应该给出错误。允许使用
char*const ptr
。只有行
ptr=“另一个字符串”
*cptr='H'是错误。