c++ - 在其范围之外使用硬编码的字符数组指针,为什么没有崩溃
问题描述
#include <iostream>
using namespace std;
int main()
{
char * a = nullptr;
{
char * b = (char *) "hello";
a = b;
}
cout << a << endl; // prints hello
return 0;
}
我有上面的代码。我很难理解为什么代码不会崩溃。我的推理是我预计会发生崩溃,因为我将指针 b 传递给带有指针 a 的上层作用域并将其用于 cout。由于“hello”是在 b 的范围内创建的,并且没有使用新的关键字,我希望它会像范围内的变量一样自动清理自己。我在想什么错??
解决方案
C 风格的字符串文字像"hello"
具有静态存储持续时间;它存在于程序的生命周期中。然后它在定义的范围之后仍然有效cout << a << endl;
(虽然a
指向它) 。b
字符串文字具有静态存储持续时间,因此在程序的生命周期内都存在于内存中。
推荐阅读
- python - 按字母顺序对每个字符串中的字母进行排序 Python 函数
- django - Django Rest Framework:修改序列化器以使用字段作为键而不是对象数组返回字典
- python - python TypeError:不支持的操作数类型/:'builtin_function_or_method'和'int'
- typescript - 使用打字稿中的字段之一创建查找类型
- clojure - 根据字符串类名创建记录
- typescript - TypeScript 可以只迭代接口的“自己的”键吗?
- python - 我的暂停显示如何在 Pygame 中正常工作?
- php - 为什么即使类确实存在并且命名空间正确,我也会收到错误 Class not found
- forms - 使用多个按钮时 SwiftUI 表单容器中的意外行为
- html - 使用视频标签嵌入 Html5 时视频放大