将int转换为int*然后再转换为int

Ham*_*aya 5 c gcc

我错过了一些明显的东西,但请考虑以下内容,

int k = 10;
int *p = &k;
int i = (int)p;
Run Code Online (Sandbox Code Playgroud)

以上产生,

warning: cast from pointer to integer of different size
Run Code Online (Sandbox Code Playgroud)

和以下,

int k = 10;
int *p = &k;
int i = p;
Run Code Online (Sandbox Code Playgroud)

原因

warning: initialization makes integer from pointer without a cast
Run Code Online (Sandbox Code Playgroud)

一点谷歌搜索引导我,

将指针转换为整数

哪个建议使用uintptr_t,

int k = 10;
int *p = &k;
int i = (uintptr_t)p;
Run Code Online (Sandbox Code Playgroud)

上面的工作没有错误没有警告.所以我的问题是k是一个int而p是一个指向k的int指针为什么我得到一个错误解除引用p?

Jos*_*ine 9

int k = 10;
int *p = &k;
int i = *p;
Run Code Online (Sandbox Code Playgroud)

注意最后一行的p之前的*.取消引用指针以获取它指向的int.

编辑:我不熟悉uintptr_t,但我运行代码int i =(uintptr_t)p; 存储到i中的结果是k的内存地址,而不是10.演员告诉编译器你真的想把地址变成一个整数(所以没有警告;因为你坚持要编译器你知道什么你正在做)但不取消引用指针.