在C ++中char * const指向的更改数据中的访问冲突

时间:2016-09-27 05:18:33

标签: c++

我正在阅读Steve Qualine撰写的C ++黑客文章并写道:

char *const ptr;//statement 1

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

*ptr = 'S';//statement 2

但是当我编写上面的代码时,statement 1本身会给我一个错误,指出必须初始化指针,当我初始化它时,statement 2会给我访问冲突。

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

1 个答案:

答案 0 :(得分:3)

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

这与const char *形成鲜明对比,其中指向的内存为const,但指针不是,因此您可以将其更改为指向内存中const char的不同区域,但是你无法改变它所指向的记忆。

请考虑以下代码段:

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".