utilisation de l'opérateur sizeof

La sortie du programme suivant

#include<stdio.h>
int main(){
    int *p[10];
    printf("%ld %ld\n",sizeof(*p),sizeof(p));
}

est

8   <--- sizeof(*p) gives  size of single element in the array of int *p[10] 
80  <--- sizeof(p) gives  size of whole array which is 10 * 8 in size.

maintenant voir le programme suivant

 #include<stdio.h>
 #define TOTAL_ELEMENTS (sizeof(array) / sizeof(array[0]))
 int array[] = {23,34,12,17,204,99,16};

  int main()
  {
      int d;
      printf("sizeof(array) = %ld \n",sizeof(array));
      printf("sizeof(array[0]) = %ld \n",sizeof(array[0]));
      printf("sizeof int %ld\n",sizeof(int));
      printf("TOTAL_ELEMENTS=%ld \n",TOTAL_ELEMENTS);
      for(d=-1;d <= (TOTAL_ELEMENTS-2);d++)
          printf("%d\n",array[d+1]);

      return 0;
  }

est

sizeof(array) = 28 
sizeof(array[0]) = 4  <--here
sizeof int 4
TOTAL_ELEMENTS=7 

Ce que je ne suis pas en mesure de comprendre, c'est pourquoi le sizeof(tableau[0]) différentes dans les deux sorties.

Je pense qu'on est compilé pour une machine 64 bit, l'autre pour la version 32 bits.
int a 4 octets, même sur les ordinateurs 64 bits
aucun de ces deux programmes ont été exécutés sur la même machine.
vous avez écrit "même machine" - qu'est-ce que le compilateur/IDE et de la machine?
Rao Ubuntu 10.04 64 machine compilateur gcc version 4.4.3 (Ubuntu 4.4.3-4ubuntu5) de l'éditeur vi

OriginalL'auteur Registered User | 2011-03-26