Fre*_*Lou 3 c++ pointers memory-management
我正在阅读麻省理工学院的C++简介,一个代码示例显示:
int *getPtrToFive() {
int *x = new int;
*x = 5;
return x;
}
int main() {
int *p;
for (int i = 0; i < 3; ++i) {
p = getPtrToFive();
cout << *p << endl;
delete p;
}
}
Run Code Online (Sandbox Code Playgroud)
我想知道为什么有可能在每次迭代后删除"p",尽管在循环开始之前声明了一次"p"并且没有使用"new"分配.
另一个问题是当"*x"在函数中被赋值为5时,因为它是一个指针,内存地址会被改变吗?那么它会是0x00005而不是实际值5吗?
我想知道为什么有可能在每次迭代后删除"p",尽管在循环开始之前声明了一次"p"并且没有使用"new"分配
不.您没有删除p,您正在删除对象p指向,使用new每次迭代分配.
另一个问题是当"*x"在函数中被赋值为5时,因为它是一个指针,内存地址会被改变吗?那么它会是0x00005而不是实际值5吗?
值x将是0xFFd00whatever.但是你要打印的值*x是"地址0xFFd00whatever内存中的数字".x=5你的代码中没有; 只有*x=5.这意味着"转到x指向的地址,并将数字5放在那里".
你可以这样思考:你有一只手,好吗?我们称之为"x".命令
x = new int;
Run Code Online (Sandbox Code Playgroud)
意思是"将手指指向桌面上的空位." 哪里
*x = 5;
Run Code Online (Sandbox Code Playgroud)
意思是"画出你手指向的五号".
| 归档时间: |
|
| 查看次数: |
262 次 |
| 最近记录: |