用 clang 编译这个程序时会出现一个警告:
format specifies type 'unsigned int' but the argument has type 'int *' [-Wformat]
#include <stdio.h> const int MAX = 3; int main () { int var[] = {10, 100, 200}; int i, *ptr; /* 指针中的数组地址 */ ptr = var; for ( i = 0; i < MAX; i++) { printf("存储地址:var[%d] = %x\n", i, ptr ); printf("存储值:var[%d] = %d\n", i, *ptr ); /* 指向下一个位置 */ ptr++; } return 0; }
编译后的二进制文件执行后,达不到预期结果。
解决办法如下:
/* ptr 改为:(unsigned int)ptr */ #include <stdio.h> const int MAX = 3; int main () { int var[] = {10, 100, 200}; int i, *ptr; /* 指针中的数组地址 */ ptr = var; for ( i = 0; i < MAX; i++) { /* ptr 改为:(unsigned int)ptr */ printf("存储地址:var[%d] = %x\n", i, (unsigned int)ptr ); printf("存储值:var[%d] = %d\n", i, *ptr ); /* 指向下一个位置 */ ptr++; } return 0; }