我错过了一些明显的东西,但请考虑以下内容,
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?
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.演员告诉编译器你真的想把地址变成一个整数(所以没有警告;因为你坚持要编译器你知道什么你正在做)但不取消引用指针.
| 归档时间: |
|
| 查看次数: |
397 次 |
| 最近记录: |