int main(void)
{
int a = 10;
int *p1 = &a;
char ch = 'c';
char *p2 = &ch;
printf("p1=>size:%d p2=>size:%d\n",
sizeof(p1), sizeof(p2));
return 0;
}Ubuntu编译后的warningsrc/pointer_basic.c: In function ‘main’:src/pointer_basic.c:26:4: warning: format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘long unsigned int’ [-Wformat=] sizeof(p1), sizeof(p2)); ^src/pointer_basic.c:26:4: warning: format ‘%d’ expects argument of type ‘int’, but argument 3 has type ‘long unsigned int’ [-Wformat=]
12 回答

onemoo
TA贡献883条经验 获得超454个赞
这两个提示并非错误,而是警告。 代码应该仍可编译通过的。
printf中 %d 指示后面参数应为int类型,而sizeof的结果是long unsigned int类型。
所以,你可以把 %d 改为 %lu,来匹配sizeof类型,这样代码更严谨。

jfhdibrbfjd
TA贡献163条经验 获得超40个赞
你就是没有头文件才导致出错的 , 电脑的不同决定seziof()的大小 。
如果你是32位操作的电脑就会显示4 如果你的电脑是64位的就会显示8

leavie
TA贡献1条经验 获得超0个赞
第七行%d改成%lu試試,
printf( "p1=>size: %lu p2=>size: %lu\n", sizeof(p1), sizeof(p2) );

jfhdibrbfjd
TA贡献163条经验 获得超40个赞
#include<stdio.h> int main(void) { int a = 10; int *p1 = &a; char ch = 'c'; char *p2 = &ch; printf("p1=>size:%d p2=>size:%d\n",sizeof(p1), sizeof(p2)); return 0; }
- 12 回答
- 0 关注
- 3790 浏览
添加回答
举报
0/150
提交
取消