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