Я читал эту статью (http://www.codeproject.com/Articles/627/A-Beginner-s-Guide-to-Pointers), в которой есть код, объясняющий причину, по которой мы должны их использовать. например. Динамическое распределение.Указатели - Динамическое распределение путаницы
Eg.1. Неправильная программа:..
«Эта программа в первую очередь вызывает функцию SomeFunction, которая создает переменную с именем nNumber, а затем делает точку 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);
}
Eg.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-accessed-outside-its-scope/6445794 # 6445794 – Lstor