Récemment, en écrivant Golang pour des emplois et des passe-temps à temps partiel, et en écrivant le langage C pour les cours et les devoirs scolaires, j'ai pensé que les pointeurs sont difficiles à comprendre, et quand je parle de cette histoire avec divers étudiants en génie, il est difficile pour tout le monde de comprendre. J'ai pensé, donc cette fois j'ai essayé de résumer les pointeurs en langage C (Golang a été fait en référence au langage C)! !! !!
Un ordinateur réserve des variables dans un programme en mémoire et stocke une adresse pour identifier son emplacement. Le pointeur est utilisé lorsque le programme souhaite gérer l'adresse. En d'autres termes, un pointeur est une variable qui gère une adresse.
Regardons la syntaxe d'utilisation des pointeurs en C.
Type de données * nom de la variable du pointeur;
(Exemple) Déclarez un pointeur pour une variable de type int
int *p;
&Nom de variable
(Exemple)
#include<stdio.h>
int main() {
int x = 1;
int *p;
p = &x;
printf("「&x "adresse: %p\n", &x);
printf("Adresse indiquée par "p": %p\n", p)
return 0
}
(Résultat de l'exécution)
「&x "adresse: 00A2EE76
Adresse indiquée par "p": 00A2EE76
--Si vous ajoutez "*" au pointeur, vous pouvez obtenir la valeur dans l'adresse indiquée par le pointeur.
*Nom de la variable du pointeur;
(Exemple)
#include<stdio.h>
int main(){
int x = 1;
int *p = &x;
printf("Valeur dans l'adresse indiquée par "p": %d\n", *p);
return 0;
}
(Résultat de l'exécution)
La valeur de l'adresse indiquée par "p": 1
Ce que je pense est déroutant et nécessite de l'attention, c'est comment interpréter "". Lors de l'affectation d'une adresse lors de la déclaration d'un pointeur, il s'agit de "int * p = & x", il semble donc que "& x" est affecté à " p", mais il est sémantiquement "p = & x". ". En d'autres termes, les deux suivants sont synonymes.
int x = 1;
int *p;
p = &x;
int x = 1;
int *p = &x;
Le deuxième point à noter concerne l'initialisation. La simple déclaration d'une variable de pointeur rend l'adresse indiquée par cette variable de pointeur indéfinie. Par conséquent, si vous utilisez la variable pointeur sans l'initialiser, vous accéderez à une adresse non spécifiée, ce qui provoque un bogue.
#include<stdio.h>
int main() {
int x = 1;
int *p;
//La ligne suivante provoque un bogue car p n'a pas été initialisé
*p = x;
}
Vous pouvez travailler avec un tableau à l'aide de l'arithmétique du pointeur en affectant l'adresse de début du tableau à une variable de pointeur. Comme vous pouvez le voir dans l'exemple ci-dessous, & num [0]
et num
sont identiques.
De plus, «* (p + i)» et «num [i]» sont identiques.
#include<stdio.h>
int main() {
int *p;
int i;
int num[3] = {1, 5, 10};
//La ligne suivante attribue l'adresse de début du tableau à la variable pointeur
p = num;
for(i = 0; i < 3; i++) {
printf("%d\n", *(p + i)); //Avancez le pointeur du nombre d'éléments et prenez la valeur
}
return 0;
}
(Résultat de l'exécution)
1
5
10
Cette fois, j'ai résumé les points de base faciles à mal comprendre sur les pointeurs en langage C. La prochaine fois, je résumerai certains des points trompeurs sur les pointeurs Golang. !! !! !!
Recommended Posts