以下代码......
void foo(char* x)
{
int i;
int len = sizeof(x)/sizeof(x[0]);
printf("len: %d\n", len);
for(i=0; i<len; i++){
printf("i: %d, v: %x\n", i, x[i]);
}
}
......当被称为:
char bar[] = {0xDE, 0xAD, 0xBE, 0xEF};
foo(bar);
...输出:
len: 8
i: 0, v: ffffffde
i: 1, v: ffffffad
i: 2, v: ffffffbe
i: 3, v: ffffffef
i: 4, v: ffffffff
i: 5, v: 7f
i: 6, v: 0
i: 7, v: 0
不完全确定它是否适用于此但是通过SO上的类似帖子阅读,这似乎是一个对齐问题(我在64位机器上)。
任何指针?
感谢。
答案 0 :(得分:4)
这与对齐无关。
int len = sizeof(x)/sizeof(x[0]);
x
是指针而不是数组。 sizeof (x)
计算64位计算机上8字节的指针大小。
现在由于整数提升(执行符号扩展),它会打印ffffffde
de
的insteas。要避免使用ffffff
,您可以使用unsigned char
类型代替char
或将printf
个参数转换为unsigned int
,如下所示:
printf("i: %d, v: %x\n", i, (unsigned int) x[i]);