【发布时间】:2017-03-26 09:48:39
【问题描述】:
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");
}
假设我上面有两个函数,我用main函数来测试我的函数:
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);
}
我在终端中得到以下结果:
ubuntu@ubuntu:~/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
谁能告诉我为什么我得到了结果?我了解第二个功能,但我不知道为什么我得到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。但是,我不知道:start[i] 指针在第一个函数中没有指向整数,例如12345 或123。相反,start[0] 只是指向第一个数字12345 的最低有效数字?谁能帮我解释一下为什么这两个功能不同?
【问题讨论】:
标签: c linux memory cpu-architecture