这个C警告意味着什么? “int格式,指针arg”

时间:2010-01-15 15:27:14

标签: c printf

#include <stdio.h>

int main() {
    // Declarations
    int iCount1, iCount2;
    int iXXTest[4][3] = {{2, 3, 5}, {9, 8, 6}, {1, 8, 4}, {5, 9, 7}};

    // Walk through 1st dimension
    for (iCount1 = 0; iCount1 < 4; iCount1++) {
        // Walk through 2nd dimension
        for (iCount2 = 0; iCount2 < 3; iCount2++) {
            printf("iXXTest[%d][%d] is at address %d and has a value of %d.\n", iCount1, iCount2, &iXXTest[iCount1][iCount2], iXXTest[iCount1][iCount2]);
        }
    }

    return 0;
}

此行生成警告:

printf("iXXTest[%d][%d] is at address %d and has a value of %d.\n", iCount1, iCount2, &iXXTest[iCount1][iCount2], iXXTest[iCount1][iCount2]);
  

int格式,指针arg(arg 4)

这是什么警告以及如何解决?

3 个答案:

答案 0 :(得分:14)

这意味着你已经使用了%d的格式(对于整数),但参数实际上是一个指针。请改用%p。

答案 1 :(得分:3)

“%d”转换说明符期望其对应的参数为int类型,并且您将向其传递指向int的指针。使用“%p”打印指针值。

答案 2 :(得分:1)

正如Jon和John所说,使用%p打印指针值。 %p期望指针指向void(void *),因此您需要在printf()调用void *时调用指针。这是因为,虽然在大多数情况下,编译器会为您执行任何对象指针的隐式转换,但它不会(不能)在可变函数中执行此操作,因为它不知道在这些情况下,函数需要void *指针。

void *