我正在解决C编程测验。
测验问题是“以下代码snnipet的输出是什么?”
uint32_t v = 0xdeadbeef;
printf("%02x", (char *) v[0]);
or uint64_t?
老实说,我不明白这个问题,所以我在我的本地机器上进行了测试。
#include<stdio.h>
#include<stdint.h>
int main() {
uint32_t v = 0xdeadbeef;
printf("%02x", (char *) v[0]); /* (1) */
int64_t w = 0xdeadbeef;
printf("%02x", (char *) w[0]); /* (2) */
}
我在(1)和(2)上遇到编译错误。
以下是错误消息
num1.c:在函数'main'中: 错误:下标值既不是数组也不是指针,也不是向量
对于这篇文章的问题,如何在没有编译错误的情况下测试此代码?
预期输出:de
,ad
,be
,ef
或00
答案 0 :(得分:1)
我认为问题是关于在内存布局中排列的四个字节uint32_t的第一个字节。这取决于字节顺序。如果要查找输出,可以查看此代码。
#include<stdio.h>
#include<stdint.h>
int main() {
uint32_t v = 0xdeadbeef;
char* pv = (char*)&v;
printf("%02x\n", (uint8_t)pv[0]);
}