code
#include <stdio.h>
int main(){
int i=10;
void *v=&i;
int i2=(int)v;
printf("%d\n",i2);
return 1;
}
在编译是出现下面的警告
../src/c-base-point.c:12:10: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
int i2=(int)v;
^
Finished building: ../src/c-base-point.c
我知道这仅仅是1个警告,可以不用理会,但是如何屏蔽这个警报呢?
int
类型不一定可以保存一个指针。比如 64 位系统中,sizeof(int)
可以是 4 ,而sizeof(void*)
则可以是 8 。于是指针转换为int
会丢失信息,于是会有警告。这里,你需要在
<inttypes.h>
中定义intptr_t
类型,保证可以放得下一个void *
。输出是也不能用%d
,而需要使用同样定义在<inttypes.h>
里的PRIdPTR
(这是一个宏)。就像这样: