【问题标题】:Const char *pointer questions?const char *指针问题?
【发布时间】:2021-02-28 02:00:11
【问题描述】:

我有一些与这个简单的 sn-p 代码相关的问题。

#include <string.h>
#include <stdio.h>

int main()
{
   const char *str1;
   str1 = "hello";
   printf("%s \n", str1);
   return 0;
}

我想问你:

  1. 像这样对 const char 指针进行赋值是否安全?考虑到 str1 永远不会改变。
  2. 是否有可能在赋值时 str1 结果为 NULL?

谢谢大家!

【问题讨论】:

  • 分配时str1 未初始化。赋值后它将指向字符串字面量。
  • 是的,它是安全的。不,这是不可能的,为什么str1 赋值后应该为NULL? “考虑到 str1 永远不会改变”:但是 str1 会在你每次分配不同的东西时改变。字符串文字 "Hello" 不会改变。
  • 许多字符串函数将它们的仅输入参数声明为const char *,当然用非常量字符串调用它们是安全的;只是承诺内容不会被修改。
  • 当你在 C 中看到一个变量前面有一个星号 (*) 时,这意味着这个变量指向这个星号左边的东西。所以const char * 变量是指向不可变数据的可变变量,而char * const 是指向可变数据的不可变变量。在这种情况下,你有一个指向字符串文字的指针,它不能被改变,所以你真的希望它是const char *
  • 可以“const char *str1;”初始化前是否为 NULL?

标签: c++ c string pointers char


【解决方案1】:

像这样对 const char 指针进行赋值是否安全?考虑到 str1 永远不会改变。

是的。事实上,这是正确的做法。

指针本身不是constconst char* 类型表示它指向的东西是const

如果您的指针是 const char* const str1(一个 const 指针!),那么您以后将无法分配给它。但是你也会因为一开始就没有初始化它而得到一个错误。

是否有可能在赋值时 str1 结果为 NULL?

没有。文字 "hello" 永远不会为空。没有字符串文字永远为空。

【讨论】:

    【解决方案2】:
    1. 做作业是安全的。
    2. 赋值后,str1 将指向图像初始化数据中的某个位置。只是在哪里依赖于实现。

    永远不要尝试修改str1 指向的位置的内存,例如使用非const 指针对其进行别名。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-05
      • 1970-01-01
      • 2016-06-10
      • 2013-06-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多