问答题
问答题1:在 64 位操作系统下列代码输出多少?
struct st_task{
uint16_t id;
uint32_t value;
uint64_t timestamp;
};
void fool(){
st_task task = {
};
uint64_t a = 0x00010001;
memcpy(&task, &a, sizeof(uint64_t));
printf("%11u,%11u,%11u", task.id, \
task.value, task.timestamp);
}
函数原型 void *memcpy(void *dest, const void *src, size_t n);
功能是:从源 src 所指的内存地址的起始位置开始拷贝 n 个字节到目标 dest 所指的内存地址的起始位置中
所以在64位操作系统下
uint16_t id 占 16字节;
uint32_t value 占32字节;
uint64_t timestamp 占64字节;
uint64_t a = 0x00010001;这条语句相当于:
a = 0000 0000 0001 0001
由于 id 占16位;所以只能取到后四位;<