如何解决“下标值既不是数组也不是指针也不是向量”

时间:2017-12-12 02:32:06

标签: c

我正在解决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'中:   错误:下标值既不是数组也不是指针,也不是向量

对于这篇文章的问题,如何在没有编译错误的情况下测试此代码?

预期输出:deadbeef00

1 个答案:

答案 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]);
}