作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我在这里遗漏了一些明显的东西,但请考虑以下内容,
int k = 10;
int *p = &k;
int i = (int)p;
以上产生,
warning: cast from pointer to integer of different size
和后续,
int k = 10;
int *p = &k;
int i = p;
原因,
warning: initialization makes integer from pointer without a cast
一些谷歌搜索引导我,
Converting a pointer into an integer
建议使用 uintptr_t,
int k = 10;
int *p = &k;
int i = (uintptr_t)p;
以上工作没有错误没有警告。所以我的问题是 k 是一个 int,p 是一个指向 k 的 int 指针,为什么我会得到一个错误取消引用 p?
最佳答案
int k = 10;
int *p = &k;
int i = *p;
注意最后一行 p 之前的 *。取消引用指针以获取它指向的 int。
编辑:我不太熟悉 uintptr_t,但我运行了代码 int i = (uintptr_t)p;存储到 i 的结果是 k 的内存地址,而不是 10。强制转换告诉编译器你真的想把地址变成一个整数(所以没有警告;因为你坚持要编译器你知道什么你正在做)但不会取消引用指针。
关于将 int 转换为 int* 然后再转换回 int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4974175/
我有本地更改和远程更改。 有人告诉我必须先推,再 pull 。这背后有什么原因吗? 最佳答案 那个人错了:正确的模型是pull-before-you-push,而不是相反。 当您pull时,git 将
我正在使用最新版本的 Flat UI Pro 1.3.2 ( http://designmodo.com/flat/ ),jQuery 插件 flatui-radiocheck v0.1.0 和 iO
我是一名优秀的程序员,十分优秀!