#c #arrays
#c #массивы
Вопрос:
У меня есть простая функция:
DoRead(double *writeArray){
//GblOutData is an array of length 80, where each element is 1
writeArray=GblOutData;
//prints out 1
printf("%f",writeArray[5]);
return 0;
}
что происходит, когда я вызываю DoRead():
double data[80];
DoRead(data);
printf("%f",data[5]);
//prints out 0.000000 instead of 1
Я не могу понять, почему это происходит. Есть идеи?
Комментарии:
1. Потому что вы никогда не устанавливаете
data[5]
значение 1? К вашему сведению, вы не меняете параметр вне функции, когда вы это делаетеwriteArray=GblOutData;
, вы просто меняете указатель внутри функции и фактически просто печатаетеGblOutData[5]
.2. @SethCarnegie ты прав! сработало, когда я просто вручную установил writeArray [5] = 1
Ответ №1:
Все, что строка
writeArray=GblOutData;
изменяет значение переменной writeArray внутри функции DoRead(). Когда он возвращается, данные внешней переменной не изменились. Вы хотите скопировать содержимое, возможно, с помощью memcpy:
memcpy(writeArray, writeArray=GblOutData, 80*sizeof *writeArray);
Комментарии:
1. Конечно, вам всегда нужно убедиться, что два массива имеют одинаковый размер. Когда эта программа вырастет, это станет проблемой.
Ответ №2:
Вам нужно передать адрес в data. Одним из решений может быть (но лично я бы не стал делать что-то подобное):
DoRead(double **writeArray){
*writeArray=GblOutData;
....
}
DoRead((double**) amp;data);
Комментарии:
1. к сожалению, я не могу свободно изменять способ установки / вызова параметров в DoRead, однако я могу делать все, что захочу внутри функции.
2. Вероятно, не то, что он хотел сделать в этом случае, поскольку он уже выделил массив снаружи.
3. Я бы выбрал решение drdwilcox с memcpy. В любом случае, я только попытался продемонстрировать, что происходит.