#c #arrays #pointers
#c #массивы #указатели
Вопрос:
Только начал изучать язык C. У меня есть массив указателей int * parr, и мне нужно заполнить его случайными числами, а затем выполнить с ним некоторые другие действия. Но я даже не понимаю, как заполнить его случайными числами. Я пробовал что-то подобное, но программа зависает:
for(i=0 ; i<R ; i )
{
for(j=0 ; j<C; j )
{
*(parr i*C j)=rand() % 10;
printf("%d",*(parr i*C j));
}
printf("n");
}
Комментарии:
1. Вы делали это с одномерным массивом?
2. ключ к этой проблеме заключается в том, как определяется и инициализируется parr, поэтому, пожалуйста, добавьте этот фрагмент кода.
3. Вам нужно опубликовать весь код с объявлением и выделением
parr
.4. Вы использовали malloc() в памяти? Вам нужно malloc R * C * sizeof int .
5. Теперь я понимаю, что проблема заключалась в том, что я не знал, как правильно инициализировать массив. После инициализации с помощью malloc программа работает, и все функции, которые я написал, тоже.
Ответ №1:
То, как вы его инициализируете, вам, вероятно malloc
, понадобится такая память:
parr = malloc(R * C * sizeof(*parr));
Комментарии:
1. Это только я или это разыменование неинициализированного указателя?
Ответ №2:
int *parr;
просто определяет указатель на целое число n, но с ним не связано хранилище. Вы могли бы либо
int parr[sizeofarray];
или
int *parr = calloc (sizeofarray, sizeof(int));
для получения нужного объема памяти.
исходя из вашего примера, размер массива должен быть не менее R * C
.
Комментарии:
1. Это должно быть: R * C * sizeof(int)
2. @Roee нет, потому что я использую sizeofarray либо в качестве аргумента размера для массива int, либо в calloc в качестве параметра nelem. calloc != malloc