C 中的指针行为
pointer behaviors in c++
本文关键字:指针 更新时间:2023-10-16
所以我在这里有一个代码:
#include <iostream>
using namespace std;
int main(void){
int *p;
int i = 30;
*p = i;
*p = 100;
cout << i << endl;
return 0;
}
有人可以指出此代码怎么了?
我认为您不需要做
之类的事情int *p = new int;
因为可以指向堆栈变量。
当前更新:我应该很久以前就弄清楚了这个基本常识的东西...修复:
int *p;
int i = 30;
p = &i; //this stores the address of i. Then we can reach the value of i by calling *p
这会导致一个非初始化的指针,导致UB:
*p = i;
您可能想要这个:
p = &i;
该程序调用不确定的行为,因为p
是未经启发的。如果以:
int* p = new int;
// the rest of the code
delete p;
无论您如何尊重指针,i
仍然是相同的。指针不会以任何方式修改i
的值。这个:
*p = i;
并不意味着"从现在开始,我对*p
做的一切都会反映为i
的值。"这仅表示将i
的值分配给p
指向的值。
您需要使用操作员&
来引用x
初始化p
:
int* p = &i;
现在p
参考 i
。现在,您有两个名称的同一对象名称,一个是*p
,另一个是i
。它们俩的意思是同一件事并修改同一对象。对其中一个进行的更改反射到另一个。
您的问题是此代码出了什么问题
int *p;
int i = 30;
*p = i;
*p = 100;
cout << i << endl;
在此处*p=i
中,您正在尝试将i
的值分配给*p
,但是指针变量可以存储您正在执行的变量的地址,而不是可变值。因此,有两种解决此问题的方法。一个是使用new
操作员分配内存,另一个是将i
的地址分配给p
p=&i
相关文章:
- 1d 智能指针不适用于语法 (*)++
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 为什么使用 "this" 指针调用派生成员函数?
- 函数向量_指针有不同的原型,我可以构建一个吗
- 使用指针从C++中的数组中获取最大值
- 助记符和指向成员语法的指针
- 嵌入方指针压缩已禁用
- 数组的指针从不分段故障
- C++ 指针的内存地址和指向数组的内存地址如何相同?
- 何时在引用或唯一指针上使用移动语义
- QMetaObject invokeMethod的基于函数指针的语法
- 如何从 std::atomic 中提取指针 T<T>?
- 如何在 C# 中映射双 C 结构指针?
- C++将浮点指针值舍入为小数位数
- 为什么++(*p)更改指针值
- 调整大小后指向元素值的指针unordered_map有效?
- 正在将指针转换为范围
- 使用指向成员的指针将成员函数作为参数传递
- 将OpenCV C++重写为EmguCV C#-如何使用指针
- C++-试图将函数指针推回到另一个CPP文件中的矢量时出错