typedef unsigned char *byte_pointer;
void show_bytes(byte_pointer start, size_t len) {
size_t i;
for (i = 0; i < len; i++)
printf(" %.2x", start[i]); //line:data:show_bytes_printf
printf("\n");
}
void show_integer(int* p,size_t len){
size_t i;
for(i=0;i<len;i++){
printf(" %d",p[i]);
}
printf("\n");
}
Supposons que j'ai deux fonctions ci-dessus, et j'utilise la fonction principale pour tester mes fonctions:Quelle est la différence entre ces deux fonctions C en termes de gestion de la mémoire?
int main(int argc, char *argv[])
{
int a[5]={12345,123,23,45,1};
show_bytes((byte_pointer)a,sizeof(a));
show_integer(a,5);
}
Je suis les résultats suivants dans mon terminal:
[email protected]:~/OS_project$ ./show_bytes
39 30 00 00 7b 00 00 00 17 00 00 00 2d 00 00 00 01 00 00 00
12345 123 23 45 1
Quelqu'un peut-il me dire pourquoi J'ai eu le résultat? Je comprends la deuxième fonction, mais je ne sais pas pourquoi j'ai obtenu 39 30 00 00 7b 00 00 00 17 00 00 00 2d 00 00 00 01 00 00 00
pour la première fonction. En fait, je sais que la séquence numérique ci-dessus est hexadécimal décimal pour 12345
, 123
, 23
, 45
, 1
. Cependant, je n'ai aucune idée: pointeur start[i]
ne pointe pas sur le nombre entier tel que 12345
ou 123
dans la première fonction. Au lieu de cela, le start[0]
pointe juste sur le chiffre le moins significatif pour le premier numéro 12345
? Quelqu'un peut-il m'aider à expliquer pourquoi ces deux fonctions sont différentes?
mais pourquoi ce byte_pointer ne pointe que vers des chiffres de 0x00003039 tels que 00 ou 39, pourquoi n'a-t-il pas pointer sur le nombre entier 0x00003039? dans la deuxième fonction p [i] fait référence au nombre entier 12345, mais dans la première fonction, start [i] ne fait référence qu'à 00 ou 39 au lieu du nombre entier 0x00003039 (12345) – user144600
parce que vous l'avez lu byte en premier un, et lire entier int dans le second, un int est de 4 octets (sur votre machine) –