我正在阅读这篇文章(http://www.codeproject.com/Articles/627/A-Beginner-s-Guide-to-Pointers),它有一些代码来解释为什么我们应该使用它们。例如。动态分配。例如:指针 - 动态分配混淆
例如:不正确的程序:。
“该程序首先调用SomeFunction函数,它创建了一个名为n已接收变量,然后使pPointer指向它然后,但是,是问题的所在。当功能叶, nNumber被删除,因为它是一个局部变量,当执行离开它们被定义的块时,局部变量总是被删除,这意味着当SomeFunction返回到main()时,变量被删除,因此pPointer指向变量使用的地方是,不再属于这个程序。“
#include <stdio.h>
int *pPointer;
void SomeFunction()
{
int nNumber;
nNumber = 25;
// make pPointer point to nNumber:
pPointer = &nNumber;
}
void main()
{
SomeFunction(); // make pPointer point to something
// why does this fail?
printf("Value of *pPointer: %d\n", *pPointer);
}
例2。正确的程序:
“当SomeFunction被调用,它分配一些内存,使pPointer指向它这一次,当函数返回时,新的内存保持不变,所以pPointer仍然指向一些有用的东西。 。这就是动态分配!“
#include <stdio.h>
int *pPointer;
void SomeFunction()
{
// make pPointer point to a new integer
pPointer = new int;
*pPointer = 25;
}
void main()
{
SomeFunction(); // make pPointer point to something
printf("Value of *pPointer: %d\n", *pPointer);
}
我的问题:
这上面的解释做出完整意义上我,我感觉很好,为什么我们使用指针。然后我决定运行这些程序来看看会发生什么。我期待第一个人为* pPointer显示一些随机数,因为这25个已被删除。两个程序都正确显示“* pPointer的值:25”。第一个程序不应该像教程所说的那样失败吗?
[返回本地地址或临时变量](http://stackoverflow.com/questions/2744264/returning-the-address-of-local-or-temporary-variable) – Lstor
这是一个很好的解释:http://stackoverflow.com/questions/ 6441218/can-a-local-variables-memory-be-accessible-scope-scope/6445794#6445794 – Lstor