打印

C语言编程过程中遇到的问题

[复制链接]
2281|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
pangshen|  楼主 | 2010-2-21 16:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
zhaiweilei| | 2010-2-21 18:23 | 只看该作者
定义 int *P;
p=&a;
**p中就是b的值

使用特权

评论回复
板凳
ShakaLeo| | 2010-2-21 18:54 | 只看该作者
本帖最后由 ShakaLeo 于 2010-2-21 19:25 编辑

int a, b = 0x11223344, c;

  a = (int)&b;
  c = *(int *)a;

假设是在32位MCU的编译器上,int为32位。变量c的值就是变量b的值。

使用特权

评论回复
地板
pangshen|  楼主 | 2010-2-22 11:45 | 只看该作者
2# zhaiweilei


你这个方法不错,谢谢喽

使用特权

评论回复
5
pangshen|  楼主 | 2010-2-22 11:46 | 只看该作者
3# ShakaLeo


你这个我不是太明白,声明时a不是指针变量,又怎么可以执行a=(int)&b;操作?

使用特权

评论回复
6
qjy_dali| | 2010-2-22 11:50 | 只看该作者
强制转换

使用特权

评论回复
7
pangshen|  楼主 | 2010-2-22 11:53 | 只看该作者
本帖最后由 pangshen 于 2010-2-22 11:55 编辑

6# qjy_dali


你说的我不太明白,能否详细一点?


你是在给我解释3楼的问题吧,现在明白啦,谢谢!

使用特权

评论回复
8
ShakaLeo| | 2010-2-22 12:26 | 只看该作者
二楼的**p在编译时应该会出错,最起码也会有警告,因为*p的类型不是指针。
*(int *)(*p)这样强制转换一下才可以。

使用特权

评论回复
9
pangshen|  楼主 | 2010-2-22 17:17 | 只看该作者
8# ShakaLeo

哦,知道啦,谢谢你哦

使用特权

评论回复
10
efen| | 2010-2-22 23:19 | 只看该作者
学习了

使用特权

评论回复
11
huangqi412| | 2010-2-23 08:27 | 只看该作者
:L  晕,学校考试?公司面试?

使用特权

评论回复
12
sj_dai| | 2010-2-23 10:21 | 只看该作者
如果是考试的题目,我猜问的人希望得到这样的答案
x=*(int*)a; //a在假设条件中已经被赋值为b的地址,x将得到b的值

解释:
a现在的内容为b的地址,只要把a的内容当作地址指针取回数据即可,C编译器是不允许直接用x=*a这样的方式进行操作,需要先进行强制转换,(int*)a的意思是把a的内容当作一个int类型的指针地址,然后用*号取去里面的数据。
前面的朋友已经说明了原因。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:Just So So!

9

主题

55

帖子

0

粉丝