2010-01-15 125 views
1
#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; 
} 

此行生成一個警告:這個C警告是什麼意思? 「INT格式,指針ARG」

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 4)

這是什麼警告有關,以及如何能我解決它?

回答

14

這意味着你已經使用%d(用於整數)的格式,但參數實際上是一個指針。改爲使用%p。

2

「%d」轉換說明符期望其相應的參數是int類型,並且您將它傳遞給指向int的指針。使用「%p」打印出指針值。

1

正如Jon和John所說,使用%p可以打印指針值。 %p預計指針無效(void *),因此您需要將指針投入printf()調用void *。這是因爲,儘管在大多數情況下,編譯器會爲您執行任何對象指針的隱式轉換爲void *,但在可變參數函數中不會(不會)這樣做,因爲它不知道函數需要void *指針在這些情況下。

printf("...at address %p...\n", (void *)&iXXTest[iCount1][iCount2]);