[WikiItic] [TitleIndex] [WordIndex

La dualitat taula/apuntador a C

Com és ben sabut existeix una certa dualitat entre el concepte de taula i d'apuntador a C. La relació s'esdevé del fet que, donada una taula com aquesta:

   1 int t[10];

l'expressió t és un valor de tipus int * que apunta al primer element de la taula.

Més precisament, l'estàndard diu (6.3.2.1): Llevat de quan és operand de sizeof, & o és un literal string usat com inicialitzador d'un array, una expressió de tipus array de T es converteix a referència a T que apunta al primer element de l'array i no és un lvalue.

D'aquesta definició se n'han de fer dues consideracions:

  1. Un identificador d'una taula té un significat diferent quan fa d'operand de sizeof, & o és un literal string usat com inicialitzador. Per exemple, en l'expressió int *p = &t t denota la taula i no l'apuntador al primer element de la taula, així p és un apuntador a una cel·la i no un apuntador a un apuntador a una cel·la. Considereu aquest programa com a exemple d'això:

       1  #include <stdio.h>
       2 
       3  int main() {
       4    int t[10];
       5    int *p, *q;
       6 
       7    p = &t;
       8    q = t;
       9    if (p == q) printf("Iguals\n");
      10 
      11    return 0;
      12  }
    
  2. A efectes pràctics t és un valor constant ja que no és un l-valor. Així doncs, tot i que el tipus de t és int * i no int *const, el valor de t no pot modificar-se.


CategoryApunts


2023-07-03 11:46