您的位置:控制工程论坛网论坛 » 嵌入式系统 » C语言中指针和数组名小趣

zhiy66

zhiy66   |   当前状态:在线

总积分:6528  2024年可用积分:0

注册时间: 2007-12-18

最后登录时间: 2012-01-11

空间 发短消息加为好友

C语言中指针和数组名小趣

zhiy66  发表于 2008/12/2 12:59:59      625 查看 0 回复  [上一主题]  [下一主题]

手机阅读

在C语言中,指针和数组名通常都可以混用。
例如
char *p;
访问时,*p跟p[0]是一样的,*(p+1)跟p[1]是一样的。
对于数组
char b[5];
访问时,b[0]跟*b是一样的,b[2]跟*(b+2)是一样的。

在一般的通信中(例如串口),通常都使用字节传输。而像float,long int之类的,
有4字节。我的方法就是取它的地址,强制转换为char型指针,然后当作数组来用。
float x;
SBUF=((char*)&x)[0];
SBUF=((char*)&x)[1];
SBUF=((char*)&x)[2];
SBUF=((char*)&x)[3];
接收时,刚好倒过来。

更有趣的是,对于数组形式,数组名和后面的偏移量可以随便换。
char buff[10];
//或者用 char *buff=&buffer;

buff[3]=0xaa;
3[buff]=0xaa;  //居然是一样的,倒塌...

因此,我认为编译器是这么干的:对于形如xxx[yyy]这样的表达式,会转化为*(xxx+yyy

),
因此写成xxx[yyy]或者写成yyy[xxx]都无所谓了...非典用法,请勿乱用,出了事偶不负责...

1楼 0 0 回复