c++ - 为什么 C++ 从大括号范围返回有效的指针数据?
问题描述
如果我将此范围内的数据指向在这些大括号范围之外声明的指针,为什么 C++ 从函数内部的大括号范围返回有效数据?
示例:
int *pInt;
// why *pInt is still "valid" ?
{
int x = 134;
pInt = &x;
}
cout << *pInt << endl;
// *pInt returns 134
另一个例子:
// or why *pChar is still "valid" ?
char *pChar;
{
char cArr[] = { 'Y', 'o', '!', '\0' };
pChar = cArr;
}
cout << pChar << endl;
// pChar returns 'Yo!'
我不明白这一点,因为在这种情况下:
int * invalid_pointer(){
int x = 134;
return &x;
}
int main(void){
int *pInt = invalid_pointer();
cout << *pInt << endl;
return 0;
}
*pInt 将是“2079168904”,这是无效值,在这种情况下这是正确的行为,我希望在大括号情况下会有相同的行为。
请解释为什么这两种情况不同。谢谢!
解决方案
推荐阅读
- javascript - React Native - 数组内对象内的数组状态更新问题
- mysql - 从表中选择多行并插入到不同的表中
- python - 我如何在 Ubuntu 中使用 pyenv 返回我的系统 python
- javascript - Vue - 是否可以在组件的计算属性中使用 Vuex getter?
- javascript - rm -rf 不显示任何错误但不删除任何文件 VS Code
- android - adb - 添加 PIN 但不安全启动的脚本
- java - 如何通过 HSSFWorkbook 设置图像大小
- apache-kafka - Kafka文件流连接和流API
- python - 来自 Automate Boring Stuff With Python 的任务。5
- visual-studio-code - 以编程方式在源代码控制消息输入框中设置焦点(vs code API)