一个C语言的疑惑

#include<stdio.h>voidmain(){inti=0;charstuffing[44];for(i=0;i<=40;i+=4)*(long*)&stuff... #include<stdio.h>
void main(){
int i=0;
char stuffing[44];

for (i=0;i<=40;i+=4)
*(long *) &stuffing[i] = 0x80484bb;
puts(stuffing);
}
这个程序中*(long *) &stuffing[i] = 0x80484bb;怎么解释???
展开
 我来答
arbies
2007-08-15 · TA获得超过442个赞
知道小有建树答主
回答量:398
采纳率:0%
帮助的人:588万
展开全部
什么是什么?

简单讲这是使用长整数(long,四字节)对字符型(单字节)数组赋值。这样做一般是出于效率考虑的(一次可以同时给四个单元赋值)

其机制为:
&stuffing[i]首先是取出stuffing中的第i个元素的地址,这时可理解成一个char*(字符型指针);
在前面加了个(long*)是强制转换成长整型指针(long *);
最后是赋值操作。

下面这两个语句
for (i=0;i<=40;i+=4)
*(long *) &stuffing[i] = 0x80484bb;
可以分解成以下几步:
char *pChar;
long *pLong;
for(i=0;i<40;i++)//注意i不能为40,否则会越界
{
pChar = &stuffing[i];
pLong = (long*)pChar;
*pLong = 0x80484bb;/*这个0x80484bb包含了不可显示字符,所以puts显示会出现奇怪的符号*/
//这样赋值后:stuffing[i]=0xbb,stuffing[i+1]=0x84,stuffing[i+2]=0x04,stuffing[i+3]=0x08
//之所以这样是因为对long的存储是:低位在前,高后在后。
}
yangdoing7689
2007-08-15 · TA获得超过661个赞
知道小有建树答主
回答量:1011
采纳率:0%
帮助的人:0
展开全部
*(long *) &stuffing[i] = 0x80484bb; 写成这样是检查你指针方面的学习.

首先stuffing[i]是一个元素,然后用了取地址&符号,然后强制类型转换为long指针类型,最后取他的内容.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
111taoxu111
2007-08-15 · 超过26用户采纳过TA的回答
知道答主
回答量:146
采纳率:0%
帮助的人:0
展开全部
OX表示十六进制数,
顶楼上的,蛮好的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
snatj
2007-08-15 · TA获得超过1356个赞
知道小有建树答主
回答量:1566
采纳率:0%
帮助的人:526万
展开全部
*(long *) &stuffing[i] = 0x80484bb;
&stuffing[i] = 0x80484bb; 意思是对一个地址名赋值.
(long *) &stuffing[i] = 0x80484bb; 把地址名转换成指针类型.因为stuffing[i]只是一个数组.

*(long *) &stuffing[i] = 0x80484bb; 是一个指针的指针.就是代表指针的地址.因为指针也是有地址的嘛
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
励如冬2
2007-08-15
知道答主
回答量:9
采纳率:0%
帮助的人:7.4万
展开全部
stuffing[i]是char数组中的一个元素
&stuffing[i]是取指向这个元素的指针,这时的指针是char*类型的(通过它只能访问char类型的元素)
(long*)&stuffing[i]将char*指针强制转换成long*(这样通过这个指针就可以访问long类型的元素了
*(long*)&stuffing[i]就是取这个指针的实际值(long类型)
*(long*)&stuffing[i] = 0x80484bb即使给这个long类型的变量赋值
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式