Добавление целых чисел с указателями в C - PullRequest
2 голосов
/ 08 марта 2011

Скажите, у меня есть int *a, int *b, int *c и скажите a и b уже указывают на некоторые целые числа.

Я хочу добавить целые числа вниз a и b и сохранить их там, где c указывает на

Это:

*c = *a + *b;

не работает. Он всегда выплевывает "недопустимый аргумент" унарный * ". Почему так?

ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ: вот как я пытаюсь это реализовать:

int getCoordinates(int argc, char *argv[], FILE *overlay, FILE *base, int *OVx, int *OVy, int *OVendx, int  *OVendy, int *Bx, int *By, int *Bendx, int *Bendy) 
{

     ... // OVx and OVw are assigned here.  I know it works so I won't waste your time with this part.

     // Set overlay image's x and y defaults (0,0).
     *OVx = 0;
     *OVy = 0;
     ...

     OVendx = (*OVx) + (*OVw);
     OVendy = (*OVy) + (*OVh);

Ответы [ 2 ]

2 голосов
/ 08 марта 2011

Если Ovendx, Ovendy указывают на допустимые ячейки памяти, то для присвоения значений этому местоположению вам нужно разыменовать их. Итак, должно быть -

(*OVendx) = (*OVx) + (*OVw);
(*OVendy) = (*OVy) + (*OVh);

Вы не разыменовываете в размещенном фрагменте.

2 голосов
/ 08 марта 2011

Вот рабочий пример:

#include <stdio.h>

int main( int argc, const char* argv[] )
{
    int x = 1;
    int y = 2;
    int z = 0;
    int *a = &x;
    int *b = &y;
    int *c = &z;

    *c = *a + *b;

    printf( "%d + %d = %d\n", *a, *b, *c );
    return 1;
}

Рабочие выходы:

./a.out 
1 + 2 = 3

Распространенные ошибки, с которыми вы могли столкнуться:

  1. Не указывает a,B или C в действительной памяти.Это приведет к сбою вашей программы.
  2. Печать значения указателя (a), а не значения, на которое он указывает (* a).Это приведет к отображению очень большого числа.
  3. Не разыменовывать назначение c = * a + * b, а не * c = * a + * b.В этом случае произойдет сбой программы при попытке разыменования c после назначения.
...