Важная прелюдия: Если вы можете использовать vector
вместо массивов/указателей. Мы все будем поощрять это как можно больше! Вполне возможно, что вы можете программировать несколько месяцев подряд, написав довольно сложное программное обеспечение и никогда не должны звонить new
или delete
и не должны беспокоиться обо всех этих неприятных проблемах C.
Просто прекратите использовать temp
!
void nothing(int* buffer)
{
for (int i = 0; i < 5; i++)
{
buffer[i] = i;
}
}
Это займет, как вход, указатель на ваш массив. Затем он будет писать непосредственно в этот массив.
Ваш предыдущий код создал второй массив. Каждый раз, когда вы вызываете new
, вы получаете новый массив. int* temp = new int[5];
. Для этого подхода к работе вам нужно будет скопировать данные в массиве temp в массив буфера. Но вы не можете копировать массивы (легко) в C.
buffer = temp; // This *doesn't* copy any array
Эта строка ничего не сделала. Эти два массива все еще существуют, и в результате этого данные не были скопированы. Здесь была изменена локальная переменная, называемая buffer
; но изменение было незначительным - буфер, используемый для указания на старый массив, и теперь он указывает на новый массив. И потому, что буфер был локальная переменная, она потеряла всякий смысл, как только функция возвращается (это указал на нелокальных данных, но сам buffer
указатель остается локальным.
В коротышка, оригинал nothing
функция сделал ничего полезного: он создал новый массив, поместил в него некоторые значения, затем проигнорировал его. Буферная переменная внутри main
не повлияла на вашу функцию.
См. [this] (http://stackoverflow.com/questions/ 4426474/is-through-pointer-argument-pass-by-value-in-c) вопрос и соответствующий ответ. – crayzeewulf