
一个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;怎么解释??? 展开
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;怎么解释??? 展开
展开全部
什么是什么?
简单讲这是使用长整数(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的存储是:低位在前,高后在后。
}
简单讲这是使用长整数(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的存储是:低位在前,高后在后。
}
展开全部
*(long *) &stuffing[i] = 0x80484bb; 写成这样是检查你指针方面的学习.
首先stuffing[i]是一个元素,然后用了取地址&符号,然后强制类型转换为long指针类型,最后取他的内容.
首先stuffing[i]是一个元素,然后用了取地址&符号,然后强制类型转换为long指针类型,最后取他的内容.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
OX表示十六进制数,
顶楼上的,蛮好的
顶楼上的,蛮好的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
*(long *) &stuffing[i] = 0x80484bb;
&stuffing[i] = 0x80484bb; 意思是对一个地址名赋值.
(long *) &stuffing[i] = 0x80484bb; 把地址名转换成指针类型.因为stuffing[i]只是一个数组.
*(long *) &stuffing[i] = 0x80484bb; 是一个指针的指针.就是代表指针的地址.因为指针也是有地址的嘛
&stuffing[i] = 0x80484bb; 意思是对一个地址名赋值.
(long *) &stuffing[i] = 0x80484bb; 把地址名转换成指针类型.因为stuffing[i]只是一个数组.
*(long *) &stuffing[i] = 0x80484bb; 是一个指针的指针.就是代表指针的地址.因为指针也是有地址的嘛
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
stuffing[i]是char数组中的一个元素
&stuffing[i]是取指向这个元素的指针,这时的指针是char*类型的(通过它只能访问char类型的元素)
(long*)&stuffing[i]将char*指针强制转换成long*(这样通过这个指针就可以访问long类型的元素了
*(long*)&stuffing[i]就是取这个指针的实际值(long类型)
*(long*)&stuffing[i] = 0x80484bb即使给这个long类型的变量赋值
&stuffing[i]是取指向这个元素的指针,这时的指针是char*类型的(通过它只能访问char类型的元素)
(long*)&stuffing[i]将char*指针强制转换成long*(这样通过这个指针就可以访问long类型的元素了
*(long*)&stuffing[i]就是取这个指针的实际值(long类型)
*(long*)&stuffing[i] = 0x80484bb即使给这个long类型的变量赋值
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询