对于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上测试)。
以后一定要深入研究,不可粗心大意!
阅读(2955) | 评论(0) | 转发(1) |