【问题标题】:const char pointer assignmentsconst char 指针赋值
【发布时间】:2011-12-05 20:50:58
【问题描述】:

以下分配是否有效?或者这些中的任何一个都会产生问题。请提出建议。

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;

【问题讨论】:

  • @ Kshitij Mehta - 不是功课,我们庞大的代码库正面临内存问题。所以请任何帮助将不胜感激。
  • @user 你已经问过同样的问题好几次了。我们一遍又一遍地回答他们。您对这个问题的编辑没有增加任何内容。它只是重复了你上面问的内容。
  • 如果我问同样的问题,我很抱歉。也许我对指针的理解并不准确。
  • 也许您可以尝试解释您正在努力理解的内容。我认为你需要尝试一些不同的东西,因为每次你问这个问题都会得到相同的答案! ;-) 尝试以与目前不同的方式表达自己。

标签: c string constants


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

      例如

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

      最后

      1. char * p - 一切尽在掌握

      希望对您有所帮助。

      【讨论】:

      • 你的意思是在第一个例子中有 2 个 *s 吗?
      • 很清楚。好贴。我只是想知道为什么我可以将const char* ptr 更改为输入参数,这完美地澄清了。我还有 40 分钟没有投票权,所以在那之后我会 ++。
      • 如果没有这个答案,我永远无法理解 2 和 3 之间的区别。
      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-06-23
        • 2019-10-31
        • 2013-05-15
        • 1970-01-01
        • 2021-02-28
        • 2022-11-20
        • 1970-01-01
        • 2016-06-10
        相关资源
        最近更新 更多