Я хочу напечатать 1000 случайных чисел, сохраненных в массиве. Числа должны быть от 1 до 10000.
Я помещаю srand(time(NULL)) в свою функцию main, и массив должен быть заполнен случайными числами в моей функции init. Функция ausgabe предназначена для форматированного вывода.
Но rand заполняет мой массив числами подряд.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define ARR_SIZE 1000
void init(int * ptr, int size){
for (int i = 0; i < size; i++){
*(ptr + i) = (rand() %10000+1);
}
}
void ausgabe(int * ptr, int size){
for (int i = 0; i < size; i++){
printf("%5i\t", * ptr + i);
if ((i + 1) %10 == 0){
printf("\n");
}
}
printf("\n\n");
}
int main(){
int zufall[ARR_SIZE];
srand(time(NULL));
init(zufall, ARR_SIZE);
printf("\n\t\t\t---unsortierte Ausgabe---\n\n");
ausgabe(zufall, ARR_SIZE);
return 0;
}
@DanByström скорее: ptr[i].
Спасибо, теперь это работает.





* ptr + i это (*ptr)+i, а не *(ptr+i). Вам нужно быть более осторожным с приоритетом оператора. (И научиться пользоваться вашим отладчиком: 30 секунд в вашем отладчике ясно показали бы, что проблема была в печати, а не в инициализации.)
когда я пытаюсь сделать это таким образом, я получаю эту ошибку: "lvalue требуется как левый операнд присваивания (*ptr) + i = (rand() %10000+1);" я пробовал (*ptr)+i и ((*ptr)+i).
хорошо, теперь это работает. Спасибо. Можете ли вы дать мне совет, как я могу контролировать выход?
Как указал Снефтель, * ptr + i — это то же самое, что и (*ptr)+i, и ((*ptr)+i) тоже. Должно быть *(ptr+i).
@SefaSimsek Задание в init было прекрасно, как *(ptr+i). Ошибка была в ausgabe: * ptr + i не делает то, что вы хотите.
Обратите внимание, что вы также можете написать *(ptr + i) как ptr[i].
есть ли у меня какие-то недостатки, когда я использую ptr[i] вместо *(ptr + i) или это на 100% то же самое?
@SefaSimsek: Преимущество в том, что вы не можете ошибиться, как вы это сделали, поскольку нет проблем с прецедентом оператора, потому что есть только один оператор ([]). Поскольку это массив, зачем вообще использовать арифметику указателей? Это просто ненужное запутывание.
printf("%5i\t", * (ptr + i));