以下作业是否有效?或者这些都会产生问题。请建议。
const char * c1;
const char * c2;
const char * c3;
char * c4;
c2 = c1;
c2 = c3;
c2 = c4;
如果我执行以下操作,那该怎么办呢?
const char * c5 = "xyz";
char * c6 = "abc";
c2 = c5;
c2 = c6;
答案 0 :(得分:31)
在你的脑海中画一条线穿过星号。左边是指向的,右边是什么类型的指针
例如
const char * const p
- 指针p
是常量,p
指向的字符也是如此 - 即不能将指针和内容都更改为p
指向的内容const char * p
- p
指向常数字符。您可以更改p
的值,并使其指向不同的常量字符。但无论p
指向什么,都无法更改内容。char * const p
- 您无法更改指针但可以更改内容最后
char * p
- 一切都准备好了希望有所帮助。
答案 1 :(得分:9)
所有都是有效的语句,因为你没有取消引用它们,因为所有的指针都没有被初始化或者没有指向任何有效的内存位置。
它们是有效的,因为指针不是常量,但指针指向的值是常量。所以,这里的指针可以重新分配到指向不同的位置。
答案 2 :(得分:3)
这些作业完全有效,正如我和其他人在你最近发表的几乎相同的问题中所解释的那样。
const char*
是指向无法使用该指针修改的内存的指针。这里没有什么可以绕过这一点。如果你从那时起分配了c4 = c1
,那么编译器就会反对它来绕过const。
答案 3 :(得分:0)
所有这些都是有效的,唯一有问题的行是char * c6 = "abc";
:这里“abc”是一个常量字面值,所以将它指定给非常量指针是不安全的,如果没有,至少应该生成一个警告编译错误(我没有尝试编译它)。