0

以下代码...

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 位机器上)。

任何指针?

谢谢。

4

1 回答 1

4

这与对齐无关。

int len = sizeof(x)/sizeof(x[0]);

x是指针而不是数组。sizeof (x)计算 64 位机器上 8 个字节的指针大小。

现在它打印ffffffdeinsteas ofde因为整数提升(执行符号扩展)。为避免这种情况,ffffff您可以使用unsigned chartype 代替char或将printf参数转换为unsigned int

printf("i: %d, v: %x\n", i, (unsigned int) x[i]);
于 2012-06-26T10:12:21.613 回答