Почему мне не нужно увеличивать указатель массива при выделении ему значений - PullRequest
0 голосов
/ 01 апреля 2012

У меня есть код для динамического выделения массива из 100 двойников указателю и инициализации памяти значениями от 1,0 до 100,0.

Мой вопрос в приведенном ниже коде, почему мне не нужно писать * ptr ++ на каждой итерации цикла for. Я попробовал это, и это не работает.

void allocate_array(){
    double *ptr;
    ptr= (double*)malloc(sizeof(double)*100);
    int i=0;
    float j=0.0;
    for(i=0;i<100;i++){
        *ptr=j++;
        printf(" %0.1lf\n",*ptr);
    }
}

Ответы [ 2 ]

3 голосов
/ 01 апреля 2012

Ну, тебе не нужно ничего делать.В вашем коде вы не инициализируете весь массив - вы просто присваиваете 100 различных значений его первому члену.Ваш код выглядит так:

double d;
for(i=0;i<100;i++){
            d=j++;
            printf(" %0.1lf\n",d);
}

Если вы хотите инициализировать весь массив, сделайте что-то вроде:

double *temp=ptr;
for(i=0;i<100;i++){
            *temp=j++;
            printf(" %0.1lf\n",*temp++);
}
1 голос
/ 01 апреля 2012

Ничего из этого не имеет значения, потому что вы не возвращаете указатель на выделенную память;вы просто теряете память.

Попробуйте что-то вроде этого:

double *allocate_array(size_t size)
{
  double *ptr = malloc(sizeof *ptr * size); // note no cast, operand of sizeof
  if (ptr)
  {
    size_t i;
    for (i = 0; i < size; i++)
    {
      ptr[i] = (double) (i+1);  // ptr[0] = 1.0, ptr[1] = 2.0, ptr[2] = 3.0, etc.
    }
  }
  return ptr;
}

, и вы назовете это как

double *myArray = allocate_array(100);

, когда закончите смассив, вам нужно освободить его:

free(myArray);

Обратите внимание, что единственное, что вы не хотите сделать в allocate_array, это изменить значение ptr, по крайней мерене без сохранения этого значения где-то еще;в противном случае вы не сможете free правильно его выполнить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...