如何消除编译器警告:format '%d'期望int实参却传入int*?
解决printf格式匹配的编译器警告问题
嘿,这个警告很好搞定,咱们先拆解下问题根源:
warning: format '%d' expects argument of type 'int', but argument 2 has type 'int *' [-Wformat=]
这个警告直白说就是:你用%d格式符告诉编译器要打印一个int类型的数值,但你实际传给printf的p1->j是一个int指针(int*),类型不匹配,所以编译器抛出了警告。你说程序功能正常,大概率是巧合——比如指针本身的地址值刚好和你期望打印的int值一样,但这是有隐患的,得修正。
下面分两种场景给出解决方案:
场景1:结构体中的
j本应是普通int类型
如果你的结构体定义里,j的类型写错成了int*,那直接修改结构体定义,把int *j改成int j。这样p1->j就是标准的int值,和%d格式符完美匹配,警告自然消失。场景2:
j确实需要是int指针类型
如果你设计结构体时,j就是用来指向int变量的指针,那你需要解引用指针,拿到它指向的实际int数值。把代码改成:printf("%d", *p1->j);这里要注意运算符优先级:
->的优先级高于*,所以*p1->j等价于*(p1->j),能正确获取指针指向的int值。
小提醒:如果不改的话,你当前打印的其实是指针的内存地址(转换成十进制的数值),而不是指针指向的真实数据,只是刚好这个地址值符合你的预期,这不是正确的逻辑哦。
内容的提问来源于stack exchange,提问作者bbcbbc1
相关产品推荐
相关产品推荐

