为什么我的代码会报错,跟教程一模一样?
3个回答
展开全部
简而言之:和编译器的标准以及电脑的位数有关。
教程里的是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;
}
教程里的是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;
}
展开全部
编译系统位数问题,你这是个64位的吧,你得去32位编译,不然可以先将int* 转成long类型,long类型可以隐式类型转换到int类型
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询