Maison  >  Article  >  développement back-end  >  Quelles sont les utilisations des pointeurs de tableau ?

Quelles sont les utilisations des pointeurs de tableau ?

coldplay.xixi
coldplay.xixioriginal
2020-06-11 16:20:554406parcourir

Quelles sont les utilisations des pointeurs de tableau ?

int *a[4]; //指针数组

Un tableau de pointeurs équivaut à déclarer plusieurs pointeurs à la fois. Chaque élément du tableau est un pointeur. C'est facile à comprendre. Concentrons-nous sur les pointeurs de tableau

int (*p)[4]; //数组指针

Les pointeurs de tableau équivalent à déclarer un pointeur à la fois. C'est juste que ce pointeur pointe vers quelque chose de très spécial, c'est un tableau.

[] a une priorité supérieure à *, donc () doit être ajouté lors de la déclaration du pointeur de tableau.

Exemple 1 :

#include<stdio.h>#include<stdlib.h>void main()
{    //数组指针的用法,用处。
    int b[16]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};    int (*p)[4]; //该语句是定义一个数组指针,指针步长为4个int即16位。    //int *p2=&b;
    p=&b;    int i=0;    while(i<16)
    {
          printf("%d\t",(*p)[i]);          //printf("%d\t",*p2++);
          i++;
    }
}

printf("%dt",(*p)[i]); parcourir le tableau de sortie b;
le pointeur de tableau est équivalent au dance king Comme un zombie, avec un frère cadet, n est le nombre de frères cadets. Vous pouvez accéder directement au frère cadet spécifique via la valeur d'indice, c'est-à-dire quel numéro dans le tableau

Le. L'indice du pointeur de tableau est incrémenté (i++ ), le pointeur pointe inchangé.

Cela peut être implémenté directement à l'aide de pointeurs entiers, et c'est plus pratique et concis. Voir la section commentée ci-dessus.

Exemple 2 : remplacez l'instruction while() dans l'exemple 1.

  while(i<4)
    {
          printf("%d\t",(*p++)[0]);
          i++;
    }

Exemple 2 génère 1 5 9 13, ce qui équivaut au pointeur déplaçant 4 int.16 octets à la fois.

Lorsque le pointeur de tableau est incrémenté (*p++), le pointeur pointe vers la taille déplacée de (type).

En fait, la phrase ci-dessus s'applique également à d'autres types de pointeurs.

Tel que int *p;

//Le pointeur pointe vers int, qui est un pointeur entier. Quelles sont les caractéristiques des pointeurs entiers ? C'est l'adresse qui permet de sauvegarder la variable entière. A quoi ça sert ? Autrement dit, lorsque p++ est utilisé, il peut pointer vers le numéro de type int suivant. Alors ? Utilisez souvent des pointeurs pour pointer vers un tableau. Parce qu'ils sont tous de type int, la taille du pas est dérivée ? La taille du pas du pointeur entier est sizeof(int), soit 4 octets

//De même, nous pouvons obtenir des pointeurs de type float, des pointeurs de type char, etc. . .

De la même manière, on peut obtenir le pointeur de tableau, quelles sont ses caractéristiques ? Enregistrez la première adresse du tableau. utiliser? Lors de l'utilisation de p++, il peut pointer vers le tableau suivant. Donc? Utilisez-le pour pointer vers un tableau à deux dimensions. Étant donné que chaque élément du tableau bidimensionnel est du même type (tous sont un tableau int), la taille du pas peut-elle être déduite ? sizeof(int[4]), soit 16

//Pour parler franchement, c'est un pointeur pointant vers le type de tableau

Exemple 3 : Le le pointeur de tableau pointe vers un tableau à deux dimensions.

#include<stdio.h>#include<stdlib.h>void main()
{    int a[3][4]={{1,2,3,4},{11,12,13,14},{21,22,23,24}};    int (*p)[4]; //该语句是定义一个数组指针,指针步长为4个int即16位。
    p=&a;    int i=0;    while(i<3)
    {        //printf("%d\t",(*p)[i]);        //数组指针,指向的是一个数组整体,相当于指针也带了下标,当执行i++操作时,下标+1,得到该数组的下一个元素,        //在该例中,指针没有位移,所以依次输出为1 2 3
        printf("%d\t",(*p++)[0]);        //整型数组类型的指针,指向的是一个数组整体,当执行*p++操作时,指针位移该数组长度的位数        //在该例中,即指针位移4个int的长度,所以输出是1 11 21
        i++;
    }
}

Tutoriel recommandé : "Tutoriel vidéo C"

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn