#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)
这是什么警告以及如何解决?
答案 0 :(得分:14)
这意味着你已经使用了%d的格式(对于整数),但参数实际上是一个指针。请改用%p。
答案 1 :(得分:3)
“%d”转换说明符期望其对应的参数为int类型,并且您将向其传递指向int的指针。使用“%p”打印指针值。
答案 2 :(得分:1)
正如Jon和John所说,使用%p
打印指针值。 %p
期望指针指向void(void *
),因此您需要在printf()
调用void *
时调用指针。这是因为,虽然在大多数情况下,编译器会为您执行任何对象指针的隐式转换,但它不会(不能)在可变函数中执行此操作,因为它不知道在这些情况下,函数需要void *
指针。
void *