Я пытаюсь стать лучше при использовании указателей, а не при использовании обозначений массивов. Так что у меня есть функция для чтения ввода пользователя и возврата указателя на этот массив. Я могу сделать это так, и, кажется, работает нормально:
float *GetValues(float *p, size_t n)
{
float input;
int i = 0;
if ((newPtr = (float *)malloc(n * sizeof(float))) == NULL) {
cout << "Not enough memory\n";
exit(EXIT_FAILURE);
}
cout << "Enter " << n << " float values separated by whitespace: \n";
while (scanf("%f", &input) == 1) {
p[i] = input;
i++;
cout << *p;
}
return p;
}
Но тогда, если я сделаю это:
float *GetValues(float *p, size_t n)
{
float *newPtr;
float input;
if ((newPtr = (float *)malloc(n * sizeof(float))) == NULL) {
cout << "Not enough memory\n";
exit(EXIT_FAILURE);
}
cout << "Enter " << n << " float values separated by whitespace: \n";
while (scanf("%f", &input) == 1) {
*newPtr++ = input;
}
return newPtr;
}
Я получаю только 0, введенные в р. Почему это так?
Кроме того, я должен выделить здесь память для массива размером n? Сначала я попробовал это с помощью метода выше, используя указатели и не выделяя память, а просто установив p = для ввода, и я получал значения мусора. Спасибо!
Отредактировано: извините, я выделил новый ptr и возвращал неправильный, как вы сказали. Я просто пытался ввести числа в свой указатель и отобразить их обратно на экране для себя и не обращал внимания на тип возвращаемого значения, и я получал вывод 0, когда я cout << * newPtr. </p>