Quand j'ai lu des livres sur le langage C, le pointeur de deux niveaux m'a dérangé beaucoup. Quelle est donc quelle est la différence entre eux? P> P>
4 Réponses :
Il convient également de mentionner qu'un tableau à 2 dimensions est simplement un tableau de matrices.
Ou un tableau de 5, 5 matrices de caractères code>
en C, il vaut mieux parler de la déclaration. Ensuite, cela devient intuitif. Pour cela, vous suivez la convention à droite gauche. Voici comment ça se passe: Comment allez-vous parler em> it? Pour cela, vous commencez à droite du nom de la variable Maintenant pour l'autre: P> s code> puis allez à gauche. Donc, vous commencez par dire "s est un / an", à droite, vous voyez un [] code> et vous dites "s est un tableau ...". Et puis vous allez à gauche et voyez le * code> et dites "s est un tableau de pointeurs". Et c'est ce que c'est. Il est un tableau de 5 pointeurs. Vous pouvez stocker différents pointeurs dans ce tableau. P> int (*callme)(int a, int b)
int (*callme[10])(int a, int b)
Vous avez oublié d'inclure char code>; char * s [5] code> n'est pas un tableau de 5 "points différents" de tout type, il est spécifiquement un tableau de 5 pointeurs à char code> i >.
C'est vrai. J'aurais dû mentionner ça.
Je ne pense pas qu'il est complètement correct de dire () code> a une plus grande priorité. Peut-être que vous vouliez dire que la présence de parenthèses peut altérer la liant i> de déclarants compliqués.
Il convient de souligner que ni a code> ou b code> sont nécessaires aux déclarations. (int, int) code> est suffisant.
La liaison est définitivement meilleure ici. Mon anglais n'est pas le meilleur. Merci!
Je reprend cela. Comment sont (complexes) déclarations analysées en termes de La priorité et l'associativité? suggère que la priorité s'applique ici.
La priorité et l'associativité sont définitivement sur la manière dont nous examinons les règles, mais le résultat est toujours la manière dont la liaison a lieu. Je fais beaucoup comme le mot.
Pouvez-vous m'en dire plus sur les tables de recherche des fonctions? int (* Callme [10]) (int A, int b) code> Comment utiliser cela?
Vous pouvez rechercher ce que la table vectorielle interruption code> est. Vous pouvez simuler cela pour vos besoins de traitement des erreurs. Vous pouvez également utiliser que si vous programmez une machine à états (un robot, la tortue dans les graphiques de la tortue, une simulation d'un processeur simple) qui dispose d'une liste de commandes primitives simples, que vous pouvez stocker dans un tableau, puis utilisez un Tableau de nombres pour faire des commandes complexes.
Dans beaucoup d'interface graphique de l'interface graphique (dans les jours les plus anciens), différents événements d'interface graphique fourniraient des chiffres différents et vous devez correspondre à des chiffres aux fonctions. C'est également un endroit où vous pourrez utiliser cette fonction.
Donc, en résumé, tout lieu où vous utiliseriez beaucoup de conditions de sélection dans une liste de fonctions de largish, vous pouvez utiliser un tableau de pointeurs vers des fonctions. Il est un peu difficile de donner des exemples en commentaires, mais je suis sûr que vous pouvez rechercher des exemples pour des tableaux de pointeurs vers des fonctions code> dans Google.
tandis que Déclaration était couvert, peut-être des différences entre l'utilisation em> doivent également être signalées: < / p>
(*) Remarque: En supposant une architecture de 64 bits. P> CHAR S [5] [5]; CODE> - P>
s code> pointe vers une zone de mémoire allouée (tas de tas de global, pile si local), li>
s [0] [0] code> .. s [4] [4] code> (ou à s [0] code> .. s [24] code>), li>
Tailleof (s) code> == 25. LI>
ul>
char * s [5]; code> - p>
s code> pointe vers une zone de mémoire allouée (tas de tas de global, pile si local), li>
s [0] code> .. s [4] code>, li>
Tailleof (s) code> == 40 (*). LI>
ul>
char (* s) [5]; code> - p>
s code> fait pas fort> point à une mémoire allouée - c'est simplement un pointeur non initialisé à ce stade, li>
& s code>, li>
Tailleof (s) code> == 8 (*). Li>
ul>
1.Char S [5] [5];
Ici, S est une matrice bidimensionnelle avec 5 rangées et 5 colonnes. Où dans ces 5 lignes et 5 colonnes, vous économiserez un élément de caractère de type. P>
2.Char * s [5]; S est un tableau unidimensionnel avec 5 éléments que chaque élément est de type pointeur de type sur le caractère. P>
3.Char (* s) [5]; s est un pointeur ici pas un tableau. S pointe sur une gamme de caractères. Pour par exemple, P>
s [0] [0] sera identique à la matrice d'arr [0] [0] p> Char Arr [5] [5];
Char (* s) [5];
S = arr; code> p>
Est char (* s) [5] code> juste un pointeur? Y a-t-il une différence entre char * s code>, char (* s) [5] code> et char (* s) [10] code>?
@Storen Oui Char (* s) [5] est juste un pointeur. Mais c'est un pointeur à un tableau de char. Pour par exemple: 1. Char (* s) [5]; Char Arr [2] [5]; S = ARR; code> dans celui-ci est pointé vers un tableau de 5 éléments qui est la première ligne d'arr. Si vous faites s ++, s pointe sur la deuxième ligne d'arr. 2. 'Char * s; Char Arr [5]; S = arr; Ici, s pointe sur le premier élément du tableau qui est le caractère. Si vous faites S ++, il pointe du caractère suivant`
Mais je veux savoir comment le compilateur connaît ce type de pointeur est INT, l'autre est CHARP? Lorsque nous définissons un type int * a code>, le compilateur stocke-t-il non seulement la valeur A code>, mais stocke également le type de A code>, donc Cela peut avoir une dépense de mémoire supplémentaire?
CDECL.org ou Installez le programme
CDECL code>.Le deuxième exemple est plus clairement écrit comme
char * s [5]; code>.