我有此代码:
#include <stdio.h>
int func(unsigned int *a) {
printf("(func) Value: %d\n", *a);
}
int main() {
unsigned char a = 255;
printf("Value: %d\n", a);
printf("Bytes: %d %d %d %d\n\n", *&a, *(&a + 1), *(&a + 2), *(&a + 3));
func((unsigned int *) &a);
return 0;
}
我有这个程序的输出:
Value: 255
Bytes: 255 0 22 234
(func) Value: -367656705
为什么类型为unsigned int,我却具有负的func值?
答案 0 :(得分:1)
为什么类型为unsigned int,我却具有负的func值?
int func(unsigned int *a) {
printf("(func) Value: %d\n", *a);
// ^^
}
因为%d
与*a
的类型不匹配
答案 1 :(得分:0)
因为sizeof(unsigned char)和sizeof(unsigned int)是不同的,并且也可能与平台有关。例如,无符号字符可以是1个字节。 unsigned int可以是4个字节。当您执行指针算术时,您可能正在查看堆栈框架中的其他内容。 C为您提供了很多绳子供您垂吊。