我正在阅读MIT的C++入门教程,其中有一个代码示例如下:
我在想为什么可以在每次迭代后删除“p”,尽管“p”在循环开始前声明并且没有使用“new”进行分配。
另一个问题是,在函数中将“*x”赋值为5时,由于它是指针,内存地址会改变对吗?所以它会变成类似于0x00005而不是实际值5?
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;
}
}
我在想为什么可以在每次迭代后删除“p”,尽管“p”在循环开始前声明并且没有使用“new”进行分配。
另一个问题是,在函数中将“*x”赋值为5时,由于它是指针,内存地址会改变对吗?所以它会变成类似于0x00005而不是实际值5?
5
赋给内存地址*x
,即x
具有一个内存地址。对x
进行解引用(使用*
)可以访问该位置。 - Ed S.y
是一个普通对象(例如int
),而yPtr
是指向y
的指针,则*yPtr
与y
相同,即y = 5
等同于*yPtr = 5
。@FreemanLou - Elliot Hatch*x = 5
这一行中,x
被解引用了,第一部分的*x
解引用了x
,将其转换为常规的int
类型以供语句的其他部分使用。 - Elliot Hatchint *x = new int;
。在这一行中,x
并没有被解引用,而是被声明为指针。我更喜欢写成int* x = new int;
,因为这样更清楚地表明了变量类型是int*
。然而,在那一行之后,每当你键入*x
时,变量x
就会被解引用。 - Elliot Hatch