我正在阅读这篇文章(http://www.codeproject.com/Articles/627/A-Beginner-s-Guide-to-Pointers),其中包含一些代码来解释我们应该使用它们的一个原因。例如。动态分配。
例 1。错误的程序:
“这个程序首先调用 SomeFunction 函数,它创建了一个名为 nNumber 的变量,然后让 pPointer 指向它。然后,问题出在哪里。当函数离开时,nNumber 被删除,因为它是一个局部变量。Local当执行离开定义它们的块时,变量总是被删除。这意味着当 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”。第一个程序不应该像教程所说的那样失败吗?