Comment trouver le "sizeof" (un pointeur pointant sur un tableau)?

Tout d'abord, voici un peu de code:

int main() 
{
    int days[] = {1,2,3,4,5};
    int *ptr = days;
    printf("%u\n", sizeof(days));
    printf("%u\n", sizeof(ptr));

    return 0;
}

Est-il un moyen de savoir la taille de la matrice que ptr pointe (au lieu de simplement donner de sa taille, qui est de quatre octets sur un système 32 bits)?

  • J'ai toujours utilisé des parens avec sizeof sûr, il la fait ressembler à un appel de fonction, mais je pense que c'est plus clair.
  • Pourquoi pas? Avez-vous quelque chose contre le superflu des parenthèses? Je pense qu'il lit un peu plus facilement avec eux, moi-même.
  • Surtout si vous êtes en train de faire quelque chose comme malloc(sizeof(int) * 4).
  • Heh. Je les trouve trop encombrer, et ... inutile, puisqu'il fait il ressemble à un appel de fonction, qui elle ne l'est pas vraiment. Je ne considère pas que ce soit clair.
  • eh bien .. en supposant que le, à gauche de l'appel est un pointeur sur int, j'aimerais écrire comme int *ptr = malloc(4 * sizeof *ptr); ce qui pour moi est beaucoup plus claires. Moins parens à lire, et à mettre le littéral constsant à l'avant, comme en mathématiques.
  • ne pas allouer un tableau de pointeurs quand vous pensiez un tableau d'entiers!
  • Il n'y a pas de "pointeur pointant sur un tableau" ici. Juste un pointeur pointant vers un int.
  • Certains compilateurs n'ont construit ins pour cette fin, gcc.gnu.org/onlinedocs/gcc/Object-Size-Checking.html

InformationsquelleAutor jkidv | 2009-01-29