2

私が持っているint *a, int *b, int *cと言ってabすでにいくつかの整数を指しています。

整数を下に追加して、ポイントし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);
4

2 に答える 2

2

Ovendx、Ovendy が有効なメモリ ロケーションを指している場合、そのロケーションに値を割り当てるには、それらを逆参照する必要があります。だから、それは-

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

投稿されたスニペットで逆参照していません。

于 2011-03-08T01:14:23.697 に答える
2

これが実際の例です:

#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 を逆参照しようとすると、プログラムがクラッシュします。
于 2011-03-08T01:00:18.923 に答える