en passant char tampon de fonctions et d'obtenir la taille de la mémoire tampon

J'ai mis le tampon de taille 100.
Je l'affichage de la mémoire tampon dans la fonction principale lorsque la mémoire tampon est déclaré.
Cependant, lorsque je passe de la mémoire tampon à la fonction et obtenir le sizeof '4',
Je pensais qu'il devrait être de 100, comme c'est la taille de la mémoire tampon que j'
créé en main.
sortie:
taille de la mémoire tampon: 100
sizeof(buffer): 4

#include <string.h>
#include <stdio.h>

void load_buffer(char *buffer);

int main()
{
    char buffer[100];
    printf("buffer size: %d\n", sizeof(buffer));
    load_buffer(buffer);

    return 0;
}

void load_buffer(char *buffer)
{
    printf("sizeof(buffer): %d\n", sizeof(buffer));
}
Dans main() explicitement déclaré un tableau, tandis que dans load_buffer() vous avez déclaré un pointeur. La différence est dans main (), le compilateur sait que le tampon est un tableau, mais dans load_buffer (), le compilateur ne sait pas si le tampon est à partir d'un tableau, ou un alloués à la paix de la mémoire dans le tas, ou une structure ou quoi que ce soit. Le compilateur ne connaît que l'adresse de mémoire (donc un pointeur), donc sizeof() retourne la taille de l'adresse de la mémoire, qui est de 4 octets de long (parce que c'est une machine 32 bits, si c'était une machine 64 bits, il serait long de 8 octets). Espérons que cela aide à comprendre un peu plus.
Au lieu de sizeof() de la fonction, utiliser strlen(), puis il retourne la taille de la valeur du pointeur.

OriginalL'auteur ant2009 | 2009-03-04