// versão do colega Daniel, publicada no Issues // #include void print_bytes(char *label, void *addr, size_t size); int main(void) { int num = 100000; int sqr_int = num * num; unsigned long sqr_long = (unsigned long)num * num; //-------------- print_bytes("---------------> num", &num, sizeof(num)); printf("Resultado -> %d\n", num); print_bytes("-----------> sqr_int", &sqr_int, sizeof(sqr_int)); printf("Resultado -> %d\n", sqr_int); print_bytes("----------> sqr_long", &sqr_long, sizeof(sqr_long)); printf("Resultado -> %lu\n", sqr_long); //-------------- return 0; } void print_bytes(char *label, void *addr, size_t size) { unsigned char *bytes = (unsigned char *)addr; //printf("%p - %s - ", bytes, label); //printf("%p - %s\n", bytes, label); printf("%s - %p\n", label, bytes); // Se a avaliação da expressão 'i > (size -1)' retornar 0 (falso), // ela receberá o valor que vem depois dos ':' que é o valor // apontado por bytes[i]. // // Se a avaliação da expressão 'i > (size -1)' retornar 1 (verdadeiro). // ela receberá o valor que vem depois da '?' // == 0 falso // != 0 verdadeiro for (size_t i = 0; i < 8; i++) { int res = i > (size - 1); printf("| Endereço do byte[i]: %p | Retorno de [i]: %d ", &bytes[i], res); printf("| Valor no byte: %02x |\n", i > (size - 1) ? 0 : bytes[i]); //printf("|>Retorno de [i]: %d : Endereço do Byte[i]: %p<| \n", res, &bytes[i]); } }