指针的问题???
#include <stdio.h>
void main()
{
int x=100,y;
char *p;
p=(char *)&x;
y=*p;
printf("%d\n",y);
}
运行结果是100
我不是太明白(char *)&x;这句是什么意思。
大家能给解释一下吗?
问题点数:0、回复次数:16Top
1 楼Salam2001(Upgrading : C++ and Data Structure ...)回复于 2005-03-03 19:24:15 得分 0
强制指针类型转换,从 int* 类型转换到 char* 类型.Top
2 楼dongpy(51-->ARM)回复于 2005-03-03 19:25:33 得分 0
p=(char *)&x;
//就是把p指向x的最低字节。Top
3 楼UPCC(杂食动物)回复于 2005-03-03 19:45:13 得分 0
p=(char *)&x;
----------
其中&x就是引用x的地址,那么指针就可以指向它,但指针p的类型是char*
所以要强加转换,但x>127时结果就开始乱了,因为char与int字节不同!Top
4 楼Student02370236(★★★★★★)回复于 2005-03-03 19:52:09 得分 0
因为x是一个int型数据,所以&x就是代表x的地址,就像是int* x中的x一样,这里就是把int* 转换成char*类型Top
5 楼liujingfu123(Oh_My_GoD)回复于 2005-03-03 20:02:53 得分 0
rightTop
6 楼CMyMfc(星际人生:=E.F=FlyForEver)回复于 2005-03-03 20:06:12 得分 0
结果跟机器平台相关哈
Top
7 楼sankt(宠辱不惊,看庭前花开花落;去留无意,望天空云卷云舒.)回复于 2005-03-03 20:08:20 得分 0
学习
Top
8 楼cqulzg(love_cpp)回复于 2005-03-03 20:14:06 得分 0
整型和字符型所占的空间不一样,强制转换后只去整型的低位还是高位啊?Top
9 楼lpfwd(寒月清风)回复于 2005-03-03 20:19:56 得分 0
这种强制类型转换,使p指向x的最低一个字节, 在TC编译器下,int占两个字节,char占一个字节,
当x>oxFF时,y不会输出x的高字节部分Top
10 楼wytianjiao(大雪无痕)回复于 2005-03-03 20:39:53 得分 0
这个转换是无损的,因为100只在低一个字节里有内容,char占一个字节,不会丢失信息……Top
11 楼EyZ(野兽之瞳)回复于 2005-03-04 03:03:19 得分 0
p=(char *)&x;
转换数据类型。把整数INT的地址&x转换为字符char。Top
12 楼yifanwu(逸凡)回复于 2005-03-04 09:03:58 得分 0
强制转换没有改变p只是让*p返回的字宽不同,所以得到的值也不同。Top
13 楼lygui(梦断天台)回复于 2005-03-04 09:57:00 得分 0
我认为,这是一种不好的编码习惯,初学的往往因为运行结果没有问题就理所当然的认为这样没问题。
事实上,一般32位操作系统,char是1字节,int是4字节。因为x=100<128,所以才没有出错。
Top
14 楼BINARYKNIGHT(B.K.)回复于 2005-03-04 12:32:02 得分 0
p=(char *)&x;
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
写成这样可以吗? // p=&(char *)x;Top
15 楼Amour81(玛里奥)回复于 2005-03-04 12:33:34 得分 0
不可以,先将X转成CHAR *就是错误。Top
16 楼Kenmark(fenix)回复于 2005-03-04 12:44:12 得分 0
p=(char *)&x是对&x(也就是X的地址)进行char *类型的强制转换,p=&(char *)x;中要注意运算符号的优先级!
Top




