所以我在这里得到了一个代码:
#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
答案 0 :(得分:6)
取消引用未初始化的指针,产生UB:
*p = i;
你可能想要这个:
p = &i;
答案 1 :(得分:3)
程序调用未定义的行为,因为p
未初始化。如果用以下内容初始化:
int* p = new int;
// the rest of the code
delete p;
无论你如何顺从指针,i
仍然是相同的。指针不会以任何方式修改i
的值。这样:
*p = i;
并不意味着&#34;从现在开始,无论我对*p
做什么,都会反映到i
的价值。&#34;它只是意味着将i
的值分配给p
指向的值。
您需要使用address-of运算符p
对x
的引用初始化&
:
int* p = &i;
现在p
引用 i
。现在,您有两个同名对象的名称,一个是*p
,另一个是i
。它们都意味着相同的东西,并修改相同的对象。对其中一个所做的更改反映到另一个。
答案 2 :(得分:0)
您的问题是此代码有什么问题
int *p;
int i = 30;
*p = i;
*p = 100;
cout << i << endl;
在这里*p=i
您试图将i
的值赋给*p
,但指针变量可以存储变量的地址而不是您正在执行的变量值。因此,有两种方法可以解决这个问题。一个是使用new
运算符分配内存,另一个是将i
的地址分配给p
p=&i