Это указатель на тот же массив, который вы сохраняете во все элементы p
, то есть все элементы указывают на arr
и, следовательно, значения из последнего цикла
Вам нужен код вроде:
int n=100,d=5;
float arr[n][d];
srand(time(NULL));
for (int i = 0; i < n; i++){
for(int j=0; j<d;j++){
arr[i][j] = rand()%100;
}
}
так что у вас есть истинный массив массива (он же 2D массив), т.е. float arr[n][d];
В качестве альтернативы вы можете сделать массив arr
, используя динамическое распределение - как:
int n=100,d=5;
float *p[n];
float* arr;
srand(time(NULL));
for (int i = 0; i < n; i++){
arr = malloc(d * sizeof *arr); // alloc array for this loop
if (arr == NULL) exit(1);
for(int j=0; j<d;j++){
arr[j] = rand()%100;
}
p[i] = arr;
}
Второе решение лучше всего, если у вас большие значения n
и d
(то есть, чтобы избежать переполнения стека)