c语言 - 我不明白为什么我们将"&"与ageAmis放在scanf中,而ageAmis是一个指针?



那是代码:我不明白为什么我们将"&"放置在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]

最新更新