2012-07-27 5 views
2

J'ai le code suivant:pointeur sur un tableau 2d

int arr[2][2][2]={10,3,4,5,6,7,8,9}; 
int *p; 
printf("%u",arr); 
p=(int *)arr; 
printf("%u",p); 

qui sort

64166 
64164 

Mais je pense que p et arr pointent vers la même adresse mémoire. Pourquoi différentes adresses sont-elles affichées?

+4

La première impression imprime une valeur non initialisée. – dasblinkenlight

+1

J'ai couru le même morceau de code, le résultat est: 3216608828,3216608828! – Rsh

+0

thnks pour effacer le doute ... – ghostrider

Répondre

2

Mais même code

#include <stdio.h> 

    int main() 
    { 

     int arr[2][2][2]={10,3,4,5,6,7,8,9}; 
     int *p; 
     printf("\n%u",arr); 
     p=(int *)arr; 
     printf("\n%u\n",p); 
     return 0; 
    } 

donne même résultat que.

enter image description here

2

Parcourons le code

int *p; 
printf("%u",p); 

p est un pointeur non initialisée int. Il va imprimer tout ce qui est en mémoire.

p=(int *)arr; 
printf("%u",p); 

p pointe maintenant sur l'adresse de la matrice en mémoire et imprime cette adresse.

+0

oh désolé, j'ai fait une erreur dans le code ... le premier printf est printf ("% u", arr) et puisque arr et p pointent à la même valeur alors pourquoi la seconde printf show diff valeurs ... – ghostrider

+0

Etes-vous en train d'imprimer des * valeurs * à partir du tableau? – Brian

+3

En plus de cela, '% u' est pour l'impression d'un' unsigned int', '% p' imprime un pointeur. –

Questions connexes