Chinaunix首页 | 论坛 | 博客
  • 博客访问: 7194017
  • 博文数量: 510
  • 博客积分: 12019
  • 博客等级: 上将
  • 技术积分: 6836
  • 用 户 组: 普通用户
  • 注册时间: 2005-08-01 16:46
文章分类

全部博文(510)

文章存档

2022年(2)

2021年(6)

2020年(59)

2019年(4)

2018年(10)

2017年(5)

2016年(2)

2015年(4)

2014年(4)

2013年(16)

2012年(47)

2011年(65)

2010年(46)

2009年(34)

2008年(52)

2007年(52)

2006年(80)

2005年(22)

分类: C/C++

2009-08-20 16:36:26

对于c语言,平时自以为是,今天看了同事的代码,认识到自己技术水平,是多么的低,很基础的东西竟然都搞不懂! 唉!!
下面概念重新认识。

指针就是地址,其大小是4个字节(32为机器)。存取方式是按照类型进行的,这句话要好好理解啊.按照定义类型为基本单位存取。
1)增加 减少操作
typedef struct _st
{
  
   char a[16];
}*_Data;


_Data  pData ;


pData+n  - pData =  n  而不是 sizeof(_st)*n。理解 含义是前后来两次是有几个_st单位,而不是多少个字节单位。  书上说 字节是最基本单位,看来领会不到家. 在此 参与运算的单位是_st(8字节为一个单位),而不是单个字节。
如果 (char*)( pData+n) -(char*)pData  则 为sizeof(_st)*n。

++ --操作同理


2)赋值情况

_Data  pData ;
_Data  pData2 ;
*pData =  *pData2 ;//该语句可以直接把pData2数据赋值给pData
而不用
memmove(pData, pData2,sizeof(_st))


赋值 只要是类型相同可直接复制,不需要再调用memmove 等函数。


以上注意和数组的比较,数组不是一个单位体,不是一个纯粹的定义类型。
char sz1[5];
char sz2[5];
(_Data) sz2 = (_Data) sz1 ;
不可以。即使 (_Data) (char*)sz2 = (_Data) (char*)sz1 或者 (_Data) (char*)&sz2[0] = (_Data) (char*)&sz1[0]; 也不可(在vc2005上测试)。

以后一定要深入研究,不可粗心大意!
阅读(2899) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~