为什么我的代码会报错,跟教程一模一样?

 我来答
朱文昊1
2021-01-28 · TA获得超过3779个赞
知道小有建树答主
回答量:191
采纳率:75%
帮助的人:67.1万
展开全部
简而言之:和编译器的标准以及电脑的位数有关。
教程里的是32位系统一个指针占的位数是4位,一个int占的位数也是4位,而在64位系统上一个int占4位,一个指针占8位,编译器的报错提示内容是“将 int* 转换为 int 会损失精度”,也就是int装不下int*里的内容的意思
解决方法:如果要把指针转为整数请将变量p以及强制类型转换的括号里的int改为long long,(有的long可能就够了,和编译器以及系统位数有关,我64位系统的电脑上的gcc编译器long和int是一样大的,所以用long long保险些)至于为什么会一样大,和c语言规范以及编译器实现有关,类似的有的编译器double和long double也是一样大的,有的又不一样)
代码:
#include <stdio.h>
int main()
{
int i=0;
long long p;
p=(long long)&i;
printf("0x%x\n",p);
printf("%p\n",&i);
return 0;
}
唯有无解Answer
2021-01-28 · 超过22用户采纳过TA的回答
知道答主
回答量:119
采纳率:41%
帮助的人:20万
展开全部
编译系统位数问题,你这是个64位的吧,你得去32位编译,不然可以先将int* 转成long类型,long类型可以隐式类型转换到int类型
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友12ee0fd
2021-01-28 · TA获得超过4.7万个赞
知道大有可为答主
回答量:1.1万
采纳率:66%
帮助的人:2336万
展开全部

这个用C编译器编译可以通过,C++编译器编译不过。

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式