2010-04-06 5 views
4
int sampleArray[] = {1,2,3,4,5}; 

Je comprends que le sampleArray pointe maintenant vers le premier élément du tableau.Quelle est la signification de ce qui suit?

Cependant, qu'est-ce que cela signifie quand je dis &sampleArray? Cela signifie-t-il que j'obtiens l'adresse de la variable sampleArray? Ou cela signifie-t-il une variable de tableau à deux dimensions?

Alors, puis-je faire:

int (*p)[5] = &sampleArray? 
+7

"Je comprends que sampleArray pointe maintenant vers le premier élément du tableau." C'est faux. 'sampleArray' * est * un tableau, pas un pointeur; Ce n'est pas la même chose. – GManNickG

Répondre

9

Non, sampleArray ne pointe pas vraiment le premier élément du tableau. sampleArrayest le tableau.

La confusion se produit parce que dans la plupart des endroits où vous utilisez sampleArray, il sera remplacé par un pointeur vers le premier élément du tableau. "La plupart des lieux" signifie "partout où ce n'est pas l'opérande des opérateurs sizeof ou unaire- &".

Depuis sampleArray est le tableau lui-même, et étant l'opérande de unary- & est l'un des endroits où il soutient que la personnalité, cela signifie que &sampleArray est un pointeur sur le tableau entier.

7

Le nom d'un tableau évalue à son adresse (qui est l'adresse de son premier élément), sampleArray et &sampleArray ont la même valeur.

Ils ne sont pas, cependant, ont le même type:

  • sampleArray a un type de int* (qui est un pointeur à int)
  • &sampleArray a un type de int (*)[5] (qui est , un pointeur vers un tableau de cinq nombres).

int (*p)[5] déclare un pointeur p à un tableau de cinq int s. Ergo,

int (*p)[5] = &sampleArray; // well-formed :) 
int (*p)[5] = sampleArray; // not well-formed :(
+0

Non, sampleArray et & sampleArray ont des valeurs différentes. & sampleArray est l'adresse de sampleArray. – WhirlWind

+1

@WhirlWind réellement si vous l'essayez (pas sûr si c'est garanti) ils ont la même valeur. ils sont de différents types cependant. – cobbal

+0

@cobbal assez intéressant, vous avez raison ... – WhirlWind

0

Quelques exemples de code:

#include <stdio.h> 

int main() 
{ 
    int a[] = {1,2,3,4,5}; 
    int (*p)[5] = &a; 
    //Note 
    //int (*p)[5] = a; // builds (with warnings) and in this case appears to give the same result 

    printf("a = 0x%x\n" , (int *)a); 
    printf("&a = 0x%x\n", (int *)(&a)); 
    printf("p = 0x%x", (int *)p); 

    return; 
} 

La sortie - même pour les deux sens.

$ ./a.exe 
a = 0x22cd10 
&a = 0x22cd10 
p = 0x22cd10 

compilateur

gcc --version $ gcc (GCC) 3.4.4 (cygming spécial, gdc 0,12, en utilisant DMD 0,125) Copyright (C) 2004 Free Software Foundation, Inc. Ceci est gratuit logiciel ; Voir la source pour la copie conditions. Il n'y a AUCUNE garantie; pas même pour la QUALITÉ MARCHANDE ou l'ADAPTATION POUR UN BUT PARTICULIER.

0

que l'on appelle l'insilisation d'une matrice. array est une collection de type similaire de données comme int, char, float nombre comme ça.

Questions connexes