Массивы и указатели на C

#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