This question already has answers here:
Closed 9 months ago.
When should I use ampersand with scanf()
(3个答案)
这就是代码:我不明白为什么我们把“&”放在ageAmis的scanf中,而ageAmis是一个指针?
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("\n\nVos amis ont les ages suivants :\n");
    for (i = 0 ; i < nombreDAmis ; i++)
    {
        printf("%d ans\n", 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,因为您正在从i基地址取消引用ageAmis位置。它相当于*(ageAmis + i)。也就是说,不能将ageAmis[i]传递给scanf,因为它需要int*类型的参数用于格式%d。所以这里需要&
您也可以选择通过ageAmis + i

    scanf("%d", ageAmis + i);

相当于:
    scanf("%d", &ageAmis[i]);

注意:
*(ageAmis + i) == *(i + ageAmis) == ageAmis[i]

关于c - 我不明白为什么在ageAmis是指针的情况下,为什么要使用ageAmis将“&”放在scanf中? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54699941/

10-11 16:08