我正在阅读Steve Qualine撰写的C ++黑客文章并写道:
char *const ptr;//statement 1
指针不受const关键字的影响,以下是合法的。
*ptr = 'S';//statement 2
但是当我编写上面的代码时,statement 1
本身会给我一个错误,指出必须初始化指针,当我初始化它时,statement 2
会给我访问冲突。
我缺少什么?,我在Visual Studio 2013上运行它。
答案 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".