c ++中的指针行为

时间:2018-02-07 21:30:14

标签: c++ pointers

所以我在这里得到了一个代码:

#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

3 个答案:

答案 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运算符px的引用初始化&

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