为什么我不需要带扫描的&符号? (在C中)

时间:2012-05-09 17:53:17

标签: c function pointers scanf ampersand

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之前使用&符号? (该代码目前有效。)

2 个答案:

答案 0 :(得分:7)

因为scanf将指针作为其参数(以便它知道要修改的变量),并且ab已经是指针。

答案 1 :(得分:2)

每当我们scan某些输入时,它需要一个存储位置(即地址)来存储该值,对于简单变量,我们必须使用& - &符号 - 来提供该地址。

此处,在函数getnums中,ab是指针,因此它们已经包含地址,因此无需编写&来提供地址。