Qu'est-ce qu'un pointeur?

Aperçu

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)! !! !!

Qu'est-ce qu'un pointeur?

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.

syntaxe

Regardons la syntaxe d'utilisation des pointeurs en C.

Déclaration du pointeur

Type de données * nom de la variable du pointeur;

(Exemple) Déclarez un pointeur pour une variable de type int  int *p;

Adresse de remplacement

(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

Afficher la valeur dans l'adresse indiquée par le pointeur

--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

A noter

Attention 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;

Attention 2

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;
}

Tableaux et pointeurs

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

Résumé

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

Qu'est-ce qu'un pointeur?
Qu'est-ce qu'une distribution?
Qu'est-ce qu'un hacker?
Qu'est-ce qu'un arbre de décision?
Qu'est-ce qu'un changement de contexte?
Qu'est-ce qu'un super utilisateur?
Qu'est-ce qu'un appel système
[Définition] Qu'est-ce qu'un cadre?
Qu'est-ce qu'une fonction de rappel?
[Python] Qu'est-ce qu'une fonction zip?
[Python] Qu'est-ce qu'une instruction with?
Qu'est-ce qu'une portée lexicale / une portée dynamique?
Qu'est-ce que le réseau neuronal convolutif?
Qu'est-ce que l'espace de noms
Qu'est-ce que copy.copy ()
Qu'est-ce que Django? .. ..
Qu'est-ce que dotenv?
Qu'est-ce que POSIX
Qu'est-ce que Linux
Qu'est-ce que SALOME?
Qu'est-ce que python
Qu'est-ce que l'hyperopt?
Qu'est-ce que Linux
Qu'est-ce que pyvenv
Qu'est-ce que __call__
Qu'est-ce que Linux
Qu'est-ce que Python
Qu'est-ce qu'un chien? Volume d'installation de Django
Qu'est-ce qu'un chien? Volume d'installation Python
Qu'est-ce qu'un chien? Django - Créer un modèle utilisateur personnalisé
Qu'est-ce que le F-Score de Piotroski?
Qu'est-ce que Raspberry Pi?
[Python] Qu'est-ce que Pipeline ...
Qu'est-ce que Calmar Ratio?
Qu'est-ce que le réglage des hyper paramètres?
À quoi sert Linux?
Qu'est-ce que l'apprentissage d'ensemble?
Qu'est-ce que TCP / IP?
C'est un Mac. Qu'est-ce que la commande Linux Linux?
Qu'est-ce qu'un chien? Django - Créer un modèle utilisateur personnalisé 2
Qu'est-ce que __init__.py de Python?
Qu'est-ce qu'un itérateur?
Qu'est-ce que UNIT-V Linux?
[Python] Qu'est-ce que virtualenv
Dites-moi ce qu'est une cartographie équiangulaire, Python!
Qu'est-ce que l'apprentissage automatique?
Qu'est-ce qu'un chien? Volume de transmission POST à l'aide de Django--forms.py
Qu'est-ce qu'un moteur de recommandation? Résumé des types
Qu'est-ce que Dieu? Créez un chatbot simple avec python
Pour moi en tant que débutant Django (2) - Qu'est-ce que MTV?
Qu'est-ce que Mini Sam ou Mini Max?
Qu'est-ce que l'analyse de régression logistique?
Cette chaîne est-elle une fraction?
Est-ce un commerce de système?
La liste Python n'est pas une liste
Qu'est-ce que Google Cloud Dataflow?
[DL] Qu'est-ce que la décroissance du poids?