warning: cast from pointer to integer of different size

[复制链接]
查看11 | 回复5 | 2018-4-5 19:04:25 | 显示全部楼层 |阅读模式
修改成:p=(void *)((unsigned int)a + (unsigned int)b);错误原因:首先一点,两个地址相加没有意义,地址加一个偏移量才有意义,你一行实质是两个地址相加;如果你想练习使用指针访问变量的值,从而得到1000+11的结果,那么就是int c = *a + *b; 最后结果是一个数字,不是地址,所以不要赋给p;如果你想要p指向最后得到的结果,那么再增加一行p=(void*)&c。相关警告及解决办法:显示:warning: implicit declaration of function 'Example()'。警告原因:在你的.c文件中调用了函数Example(),可是你并没有把声明这个函数的相应的.h文...
回复

使用道具 举报

千问 | 2018-4-5 19:04:25 | 显示全部楼层
char *是四字节,而long long是8字节,在把char *强转成整型的时候,默认专为4字节,与long long的8字节不匹配,所以告警。这句直接改为p=a+b;不就可以了?...
回复

使用道具 举报

千问 | 2018-4-5 19:04:25 | 显示全部楼层
这一行问题很多,看起来兄弟是刚刚学习这门语言的1. 首先一点,两个地址相加没有意义,地址加一个偏移量才有意义,你一行实质是两个地址相加。2. 如果你想练习使用指针访问变量的值,从而得到1000+11的结果,那么就是int c = *a + *b; 最后结果是一个数字,不是地址,所以不要赋给p3. 如果你想要p指向最后得到的结果,那么再增加一行p=...
回复

使用道具 举报

千问 | 2018-4-5 19:04:25 | 显示全部楼层
p=(void *)((long long)a+(char *)b); // a 和 b 都是指针,按说是不能加的,先想好要做什么.printf("p = %d\n",(void *)p); // %d是整数的格式符号, 改成 %p...
回复

使用道具 举报

千问 | 2018-4-5 19:04:25 | 显示全部楼层
改成p=(void *)((int)a+(char *)b);就行了,没必要用long long...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行