那是代码:我不明白为什么我们将"&"放置在Ageamis是指针时,在带有Ageamis的Scanf中?NB"此代码有效"
int main(int argc, char *argv[]){
int nombreDAmis = 0, i = 0;
int* ageAmis = NULL; // Ce pointeur va servir de tableau après l'appel du malloc
// On demande le nombre d'amis à l'utilisateur
printf("Combien d'amis avez-vous ? ");
scanf("%d", &nombreDAmis);
ageAmis = malloc(nombreDAmis * sizeof(int)); // On alloue de la mémoire pour le tableau
// On demande l'âge des amis un à un
for (i = 0 ; i < nombreDAmis ; i++)
{
printf("Quel age a l'ami numero %d ? ", i + 1);
scanf("%d", &ageAmis[i]); //why the "&"
}
// On affiche les âges stockés un à un
printf("nnVos amis ont les ages suivants :n");
for (i = 0 ; i < nombreDAmis ; i++)
{
printf("%d ansn", ageAmis[i]);
}
// On libère la mémoire allouée avec malloc, on n'en a plus besoin
free(ageAmis);
}
return 0;
}
您是正确的,ageAmis
是一个指针。但是,那不是您将scanf()
的内容。
ageAmis[i]
具有int
类型,因为您是从ageAmis
基础地址取消i
位置。它等效于*(ageAmis + i)
。那就是您无法将ageAmis[i]
传递给scanf
,因为它期望格式%d
的类型int*
参数。因此,这里需要&
。
您也可以通过ageAmis + i
:
scanf("%d", ageAmis + i);
等效于:
scanf("%d", &ageAmis[i]);
请注意:
*(ageAmis + i) == *(i + ageAmis) == ageAmis[i]