Pourquoi n’ai-je pas besoin d’esperluettes avec le scanf? (En 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); } 

Pourquoi n’ai-je pas besoin de l’esperluette avant les a et b dans le scanfs? (Le code fonctionne actuellement.)

Parce que scanf prend les pointeurs comme arguments (pour qu’il sache quelle variable modifier), et a et b sont déjà des pointeurs.

Chaque fois que nous scan une entrée, un emplacement de mémoire (c’est-à-dire une adresse) est nécessaire pour stocker cette valeur. Pour les variables simples, nous devons utiliser & ampersand pour fournir cette adresse.

Ici, dans les fonctions getnums , a et b sont des pointeurs, ils contiendront donc déjà l’adresse, donc pas besoin d’écrire & de donner l’adresse.