Shankar Kumar
Shankar Kumar

Reputation: 2357

Why don't I need ampersands with the scanf? (In C)

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);
}

Why don't I need ampersands before the a and b in the scanfs? (The code currently works.)

Upvotes: 1

Views: 829

Answers (2)

Abhishek Singh
Abhishek Singh

Reputation: 123

Whenever we scan some input it needs a memory location(i.e. address) to store that value, for simple variables we have to use & - ampersand - to provide that address.

Here, in function getnums, a and b are pointers so they will already contain address, so no need to write & to give the address.

Upvotes: 2

Oliver Charlesworth
Oliver Charlesworth

Reputation: 272477

Because scanf takes pointers as its arguments (so that it knows what variable to modify), and a and b are already pointers.

Upvotes: 7

Related Questions