#include void print_bytes(char *label, void *addr, size_t size); // declaração do protótipo int main(void) { int num = 100000; // declaração da variável num como valor inteiro int sqr_int = num * num; // inicializa o inteiro sqr_int como num multiplicado por num unsigned long sqr_long = (unsigned long)num * num; // atribui sqr long como tipo long, garantindo sua tipagem correta com o parentesis print_bytes("num ", &num, sizeof(num)); printf("-> %d\n", num); //utiliza o protótipo para imprimir o endereço na memória e bytes á byte do dado //utiliza o printf para imprimir o valor literal da variável print_bytes("sqr_int ", &sqr_int, sizeof(sqr_int)); printf("-> %d\n", sqr_int); print_bytes("sqr_long", &sqr_long, sizeof(sqr_long)); printf("-> %lu\n", sqr_long); return 0; } void print_bytes(char *label, void *addr, size_t size) { //cria o protótipo contador de bytes, utilizando um ponteiro para char, um ponteiro para endereço e o especificador size_t unsigned char *bytes = (unsigned char *)addr; //declara o ponteiro bytes como unsigned char e o inicializa em addr printf("%p - %s - ", bytes, label); // utiliza o printf para impŕimir o endereço dos bytes e o tipo enunciado for (size_t i = 0; i < 8; i++) printf("%02x ", i > (size - 1) ? 0 : bytes[i]); } //criar um loop que percorre byte a byte a variável declarada até o valor 8 de size_t, imprimi todos os indices do item byte //