用 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;
}