1
void getnums(int *a, int *b);

int main()   
{  
    int a;
    int b;
    int c;
    getnums(&a,&b);
    c = a + b;
    printf("a + b = %d\n", c);
    return 0;  
}

void getnums(int *a, int *b)
{ 
    printf("a:? ");
    scanf("%d", a);
    printf("b:? ");
    scanf("%d", b);
}

scanfs で a と b の前にアンパサンドが必要ないのはなぜですか? (コードは現在動作します。)

4

2 に答える 2

7

scanf引数としてポインターを取り (変更する変数を認識できるようにするため)、andab既にポインターであるためです。

于 2012-05-09T17:54:19.933 に答える
2

入力するたびにscan、その値を格納するためのメモリ位置 (つまり、アドレス) が必要になります。単純な変数の場合、&そのアドレスを提供するためにアンパサンドを使用する必要があります。

ここで、 functiongetnumsでは、abはポインターであるため、既にアドレスが含まれているため&、アドレスを指定するために書き込む必要はありません。

于 2012-05-09T18:40:00.873 に答える