【发布时间】: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;
}
我想问你:
- 像这样对 const char 指针进行赋值是否安全?考虑到 str1 永远不会改变。
- 是否有可能在赋值时 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