Как увеличить элемент массива с указателями в C? - PullRequest
1 голос
/ 06 апреля 2020
#include<stdio.h>
main()
{
    int array[20]={1,5,10,15,20};
    array[10]=*array+1;
    array[1]=*(array+2)++;
    array[5]=*(array+3)*array[4];
    printf("array[10]=%d\narray[1]= %d\narray[5] = %d\n",array[10], array[1], array[5]);
    return 0;
}

Я получил ошибку «Требуется значение как операнд приращения». Что я могу сделать, чтобы исправить мои коды?

Ответы [ 3 ]

1 голос
/ 06 апреля 2020

В этом выражении

array[1]=*(array+2)++;

выражение правой руки эквивалентно

array[1]=*( (array+2)++ );

, то есть сначала приращение постфикса применяется к временному объекту (указателю) array + 2 и его результат (указатель перед инкрементом) разыменовывается.

Вы не можете увеличивать временный объект. Если вы хотите постинкрементно увеличить значение указанного элемента, то вы должны написать

array[1] = ( *(array+2) )++;

Если вы хотите предварительно увеличить значение, вы должны написать

array[1] = ++*(array+2);
0 голосов
/ 06 апреля 2020

Вот как я это исправил:

#include<stdio.h>
main()
{
    int array[20]={1,5,10,15,20};
    array[10]=*array+1; //This gets the value of array[0] adds 1 and assigns it to array[10]
    array[1]=((*(array+2))++);// This assigns the value of array[2] to array[1] and then increments array[2] by 1
    /****
    int i=0;
    Remember the difference between printf("%d,i++); & printf("%d,++i);
    the first prints the value then increments i by 1
    the second increments the value then print i;
    */
    array[5]=*(array+3)*array[4]; //This is equivalent to array[5] = array[3]*array[4]=15*20=300
    printf("array[10]=%d\narray[1]= %d\narray[5] = %d\narray[2]=%d",array[10], array[1], array[5],array[2]);
    return 0;
}
0 голосов
/ 06 апреля 2020

* (массив + 2) ++ означает (массив + 2) = (массив + 2) +1 и в вашем случае массив [1] = (массив + 2) ++ что означает массив [1] = (массив + 2) = * (массив + 2) +1 !!! Ошибка

вы должны сделать это:

main()
{
  int array[20]={1,5,10,15,20};
  array[10]=*array+1;
  array[1]=*(array+2)+1;
  array[5]=*(array+3)*array[4];
  printf("array[10]=%d\narray[1]= %d\narray[5] = %d\n",array[10], array[1], 
  array[5]);
  return 0;
}

или если вы хотите получить следующее значение:

array[1]=*( (array+2)++ );
...