English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

C++ 基础教程

C++ Contrôle de flux

C++ Fonctions

C++ Tableaux & Chaînes

C++ Structures de données

C++ Classes & Objets

C++ 指针

C++ Héritage

C++ STL Tutoriel

C++ Manuel de référence

C++ Pointeurs et tableaux

Dans cet article, vous découvrirez la relation entre les tableaux et les pointeurs et utiliserez efficacement ces derniers dans votre programme.

指针est une variable qui stocke des adresses. Les pointeurs peuvent non seulement stocker l'adresse d'un seul variable, mais aussil'arrayl'adresse d'un élément unitaire.

Voyons un exemple suivant :

int* ptr;
int a[5];
ptr = &a[2];  // &a[2] est a[5l'adresse du troisième élément.]

Supposons que le pointeur doit pointer vers le quatrième élément de l'array, c'est-à-dire l'adresse de stockage du quatrième élément de l'array dans le cas précédent.

En raison de ptr pointant vers le troisième élément de l'exemple précédent, ptr + 1Il pointe vers l'élément quatrième.

Vous pourriez penser que, ptr +1Il vous fournit l'adresse du prochain octet de ptr. Mais c'est incorrect.

C'est parce que le pointeur ptr est un pointeur de type int, et la taille de int est fixe pour le système d'exploitation (64La taille du type int dans le système d'exploitation est4octets). Par conséquent, ptr et ptr +1diffèrent de4octets.

Si le pointeur ptr est un pointeur de type char, alors l'adresse de ptr et l'adresse de ptr + 1Les adresses entre1octets, car la taille d'un caractère est1octets.

Exemple1: C ++Pointeurs et tableaux

C ++Le programme affiche les adresses des éléments du tableau et des pointeurs.

#include <iostream>
using namespace std;
int main()
{
    float arr[5];
    float *ptr;
    
    cout << "Affichage de l'adresse en utilisant le tableau : " << endl;
    for (int i = 0; i < 5; ++i)
    {
        cout << "&arr[" << i << "] = " << &arr[i] << endl;
    }
    // ptr = &arr[0]
    ptr = arr;
    cout << "\nAffichage de l'adresse en utilisant le pointeur : " << endl;
    for (int i = 0; i < 5; ++i)
    {
        cout << "ptr + " << i << " = " << ptr + i << endl;
    }
    return 0;
}

输出结果

Affichage de l'adresse en utilisant le tableau :
&arr[0] = 0015F718
&arr[1] = 0015F71C
&arr[2] = 0015F720
&arr[3] = 0015F724
&arr[4] = 0015F728
Affichage de l'adresse en utilisant le pointeur :
ptr + 0 = 0015F718
ptr + 1 = 0015F71C
ptr + 2 = 0015F720
ptr + 3 = 0015F724
ptr + 4 = 0015F728

Dans le programme ci-dessus, les adresses des éléments du tableau arr sont affichées avec des pointeurs ptr différents.

Mais, les éléments du tableau peuvent être accédés en utilisant le nom du tableau arr avec la notation de pointeur. Par exemple :

int arr[3];
&arr[0] équivaut à arr
&arr[1] équivaut à arr + 1
&arr[2] équivaut à arr + 2

Exemple2: Pointeurs et tableaux

C ++Le programme affiche les adresses des éléments d'un tableau à l'aide des symboles de pointeur.

#include <iostream>
using namespace std;
int main() {
    float arr[5];
    
    cout << "Affichage de l'adresse en utilisant les symboles de pointeur : " << endl;
    for (int i = 0; i < 5; ++i) {
        cout << arr + i << endl;
    }
    return 0;
}

输出结果

Affichage de l'adresse en utilisant les symboles de pointeur :
045FB90
045FB94
045FB98
045FB9C
045FBA0

Vous savez, le pointeur ptr conserve l'adresse, tandis que l'expression*ptr pour obtenir la valeur stockée à l'adresse.

De même, on peut utiliser*(ptr + 1) pour obtenir la valeur stockée dans le pointeur ptr + 1des valeurs.

Considérez le code suivant :

int ptr[5] = {3, 4, 5, 5, 3};
  • &ptr[0] égale à ptr ,*ptr égale à ptr[0]

  • &ptr[1] égale à ptr + 1,*(ptr + 1) égale à ptr[1]

  • &ptr[2] égale à ptr + 2,*(ptr + 2) égale à ptr[2]

  • &ptr[i] égale à ptr + i ,*(ptr + i) égale à ptr[i]

Exemple3: C ++Pointeurs et tableaux

C ++programme pour insérer et afficher les données entrées avec des symboles de pointeur.

#include <iostream>
using namespace std;
int main() {
    float arr[5];
    
   // 使用指针符号插入数据
    cout << "输入5个数字: ";
    for (int i = 0; i < 5; ++i) {
        cin >> *(arr + i) ;
    }
    // 使用指针符号显示数据
    cout << "显示数据: " << endl;
    for (int i = 0; i < 5; ++i) {
        cout << *(arr + i) << endl ;
    }
    return 0;
}

输出结果

输入5个数字: 125
145
180
225
335
显示数据:
125
145
180
225
335