您的位置:首页 > 其它

C中有关内存操作的一些Tip

2011-04-05 10:18 288 查看
假设一个数组a,数组元素都是int,数组共有3个元素,那么

a+1整个表达式就等于a[1]

此时如果假设在系统中,一个int使用2个Byte来存储,那么a+1这个表达式其实是将

a的地址向后移动了2个Byte,如果要将a的地址往后移动1个Byte的话,那么可以这样作

unsigned char *p = a;

p+1 ---------------- 此时就实现了a的地址向后移动1个Byte,因为unsigned char是以1个Byte来存放

这里可能有个疑问,unsigned char和char有什么区别呢?我们都知道,char其实是ASCII码,使用8个Bit来存储,但是最高位不考虑,也就是说只有1-127才有定义, 128以上的ASCII码是没有定义的(定义为扩展字符);但是unsigned char的话,128以上的字符他也可以认识,就是会显示为扩展字符,也就是说最高位如果为1,unsigned char也是可以显示和定义的

另外,在C中,对于struct,我们在引用其内部的element的时候,不要使用地址偏移的做法来作,要使用C语法中定义的.号和-> 号来取,因为struct在内存中存放的时候有一个地址对齐的做法,如果我们使用将struct的基地址向后偏移的方式来取其中的element,那么可 能会出现问题的
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: