我正在閱讀這篇文章(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