const char指针赋值

时间:2011-10-12 06:21:43

标签: c string const

以下作业是否有效?或者这些都会产生问题。请建议。

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;

4 个答案:

答案 0 :(得分:31)

在你的脑海中画一条线穿过星号。左边是指向的,右边是什么类型的指针

例如

  1. const char * const p - 指针p是常量,p指向的字符也是如此 - 即不能将指针和内容都更改为p指向的内容
  2. const char * p - p指向常数字符。您可以更改p的值,并使其指向不同的常量字符。但无论p指向什么,都无法更改内容。
  3. char * const p - 您无法更改指针但可以更改内容
  4. 最后

    1. char * p - 一切都准备好了
    2. 希望有所帮助。

答案 1 :(得分:9)

所有都是有效的语句,因为你没有取消引用它们,因为所有的指针都没有被初始化或者没有指向任何有效的内存位置。

它们是有效的,因为指针不是常量,但指针指向的值是常量。所以,这里的指针可以重新分配到指向不同的位置。

答案 2 :(得分:3)

这些作业完全有效,正如我和其他人在你最近发表的几乎相同的问题中所解释的那样。

const char*是指向无法使用该指针修改的内存的指针。这里没有什么可以绕过这一点。如果你从那时起分配了c4 = c1,那么编译器就会反对它来绕过const。

答案 3 :(得分:0)

所有这些都是有效的,唯一有问题的行是char * c6 = "abc";:这里“abc”是一个常量字面值,所以将它指定给非常量指针是不安全的,如果没有,至少应该生成一个警告编译错误(我没有尝试编译它)。