我正在尝试编译这个程序,但希望在没有警告的情况下进行。
#include<stdio.h>
int main()
{
int arr[] = {1,2,3};
printf("value1 = %d value2 %d\n", *(&arr+1), *(arr+1));//here is the warning
return 0;
}
但是我收到了编译时警告。
warning: format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘int *’ [-Wformat]
我在一台64位Ubuntu机器上编译我的程序,使用的是gcc版本4.6.3(Ubuntu/Linaro 4.6.3-1ubuntu5)编译器。
*(&arr+1)
--> 获取指向整型数组的指针arr
的地址(作为一维三元素整型数组的指针),加上一维三元素整型数组的大小偏移,然后进行解引用操作以获取一个三元素整型数组,随后将其转换为指向整型的指针(该指针指向arr
原始开头的第四个整型,即指向从arr
地址开始的第二个整型数组的第一个整型)。 - Dmitri