6
votes

Pourquoi Scanf () a-t-il besoin et opérateur (adresse de) dans certains cas, et pas d'autres?

Pourquoi devons-nous mettre un opérateur & code> dans scanf () code> pour stocker des valeurs dans un tableau entier mais pas pendant que vous stockez une chaîne dans un tableau de charme?

char s[5]; scanf("%s",s);


5 Réponses :


1
votes

scanf ("% d", A + i) fonctionne aussi.

% d et % s Il suffit de dire scanf à quoi s'attendre mais dans les deux cas, il s'attend à une adresse

en C, les tableaux et les pointeurs sont liés.

% s Il suffit de dire à scanf pour attendre une chaîne qui est une chaîne \ 0 terminée, que ce soit dans le tableau de caractères ou non scanf ne se soucie pas.


0 commentaires

-2
votes

Parce que les matrices de caractères sont déjà pointeurs.

Vous pouvez penser à des tableaux C comme pointeurs sur une quantité de RAM attribuée à la pile. Vous pouvez même utiliser les opérations de pointeur sur eux au lieu d'indexation du tableau. * A et A [0] produisent les deux mêmes résultat (renvoyer le premier caractère dans la matrice).


2 commentaires

Parce que les matrices de caractères sont déjà des pointeurs. ils ne sont pas.


Quand ce mythe meurt-il?



8
votes

Scanf accepte un pointeur sur tout ce que vous mettez la valeur dans. Dans le premier cas, vous transmettez une référence à l'INT spécifique à la position I dans votre réseau entier. Dans la deuxième instance, vous passez à l'ensemble de la matrice pour scanner. En C, les tableaux et les pointeurs sont synonymes et peuvent être utilisés de manière interchangeable (en quelque sorte). La variable S est en fait un pointeur à la mémoire qui a un espace contigu pour 5 caractères.


0 commentaires

3
votes

Lorsque vous utilisez le nom d'un tableau dans une expression (sauf comme l'opérande de Tailleof ou l'adresse de l'opérateur & ), il évaluera à l'adresse du premier élément de cette matrice - c'est-à-dire une valeur de pointeur. Cela signifie qu'aucun & est nécessaire pour obtenir l'adresse.

Lorsque vous utilisez un int (ou court, long, char, float, double, etc.) dans une expression (à nouveau, sauf comme l'opérande de Tailleof ou & ) Il évalue la valeur de cet objet. Pour obtenir l'adresse (c'est-à-dire une valeur de pointeur), vous devez utiliser le & pour prendre l'adresse.


0 commentaires

2
votes
  • Toutes les variables utilisées pour recevoir des valeurs via scanf () doivent être transmis par leurs adresses. Cela signifie que tous les arguments doivent être signalés sur les variables utilisées comme arguments.

    scanf ("% d", & comptez);

  • STINGS sont lus dans les tableaux de caractères et le nom de la matrice sans index est l'adresse du premier élément du tableau.SO pour lire une chaîne dans une adresse de réseau de caractères, nous utilisons

    scanf ("% s", adresse);

  • Dans cette affaire, l'adresse est déjà un pointeur et ne doit pas ne pas être précédée de l'opérateur.


0 commentaires