Comprendre la relation entre les tableaux et les pointeurs en C
Relation entre les tableaux et les pointeurs
Dans ce tutoriel, vous apprendrez la relation entre les tableaux et les pointeurs en programmation C. Vous apprendrez aussi à accéder aux éléments d'un tableau en utilisant des pointeurs.
Avant d'aborder la relation entre tableaux et pointeurs, assurez-vous de connaître ces deux sujets :
- Tableaux en C
- Pointeurs en C
Relation entre les tableaux et les pointeurs
Un tableau est un bloc de données séquentielles. Écrivons un programme pour afficher les adresses des éléments d'un tableau.
#include <stdio.h>
int main() {
int x[4];
int i;
for(i = 0; i < 4; ++i) {
printf("&x[%d] = %p\n", i, &x[i]);
}
printf("Adresse du tableau x : %p", x);
return 0;
}
Sortie
&x[0] = 1450734448 &x[1] = 1450734452 &x[2] = 1450734456 &x[3] = 1450734460 Adresse du tableau x : 1450734448
Il y a une différence de 4 octets entre deux éléments consécutifs du tableau x. C'est parce que la taille de int est de 4 octets (sur notre compilateur).
Remarquez que l'adresse de &x[0] et x est la même. C'est parce que le nom de la variable x pointe vers le premier élément du tableau.

D'après l'exemple ci-dessus, il est clair que &x[0] est équivalent à x. Et x[0] est équivalent à *x.
De même,
&x[1]est équivalent àx+1etx[1]est équivalent à*(x+1).&x[2]est équivalent àx+2etx[2]est équivalent à*(x+2).- ...
- En général,
&x[i]est équivalent àx+ietx[i]est équivalent à*(x+i).
Exemple 1 : Pointeurs et tableaux
#include <stdio.h>
int main() {
int i, x[6], sum = 0;
printf("Entrez 6 nombres : ");
for(i = 0; i < 6; ++i) {
// Équivalent à scanf("%d", &x[i]);
scanf("%d", x+i);
// Équivalent à sum += x[i]
sum += *(x+i);
}
printf("Somme = %d", sum);
return 0;
}
À l'exécution, la sortie sera :
Entrez 6 nombres : 2 3 4 4 12 4 Somme = 29
Ici, nous avons déclaré un tableau x de 6 éléments. Pour accéder aux éléments du tableau, nous avons utilisé des pointeurs.
Dans la plupart des contextes, les noms de tableaux se transforment en pointeurs. En termes simples, les noms de tableaux sont convertis en pointeurs. C'est la raison pour laquelle vous pouvez utiliser des pointeurs pour accéder aux éléments des tableaux. Cependant, vous devez vous rappeler que les pointeurs et les tableaux ne sont pas la même chose.
Il existe quelques cas où les noms de tableaux ne se transforment pas en pointeurs. Pour en savoir plus, consultez : Quand le nom d'un tableau ne se transforme-t-il pas en pointeur ?
Exemple 2 : Tableaux et pointeurs
#include <stdio.h>
int main() {
int x[5] = {1, 2, 3, 4, 5};
int* ptr;
// ptr reçoit l'adresse du troisième élément
ptr = &x[2];
printf("*ptr = %d \n", *ptr); // 3
printf("*(ptr+1) = %d \n", *(ptr+1)); // 4
printf("*(ptr-1) = %d", *(ptr-1)); // 2
return 0;
}
À l'exécution, la sortie sera :
*ptr = 3 *(ptr+1) = 4 *(ptr-1) = 2
Dans cet exemple, &x[2], l'adresse du troisième élément, est assignée au pointeur ptr. Donc, 3 a été affiché quand nous avons imprimé *ptr.
Et l'affichage de *(ptr+1) nous donne le quatrième élément. De même, l'affichage de *(ptr-1) nous donne le deuxième élément.
Langue C
- Big Data et Cloud Computing : Comment ils fonctionnent ensemble
- Programmation C : Passage d'adresses et de pointeurs aux fonctions – Guide pratique
- Maîtriser les structures et pointeurs en C : Guide pratique
- Comprendre le déséquilibre tension-courant dans les moteurs électriques : causes et dépannage
- Comment l'IoT et l'Edge Computing se complètent
- SCADA vs HMI : différences clés et leur rôle dans l'Industrie 4.0
- Comprendre les Moteurs DC vs AC : Différences Clés et Guide d'Achat
- Brasage vs Soudure : Différences Clés Expliquées
- Moteurs 2 temps vs 4 temps : différences clés expliquées