转帖:<br /><br /><br />C语言中指针和数组名小趣 <br />电脑圈圈 发表于 2007-8-22 11:34:00 <br /><br /><br />在C语言中,指针和数组名通常都可以混用。<br />例如<br />char *p;<br />访问时,*p跟p[0]是一样的,*(p+1)跟p[1]是一样的。<br />对于数组<br />char b[5];<br />访问时,b[0]跟*b是一样的,b[2]跟*(b+2)是一样的。<br /><br />在一般的通信中(例如串口),通常都使用字节传输。而像float,long int之类的,<br />有4字节。我的方法就是取它的地址,强制转换为char型指针,然后当作数组来用。<br />float x;<br />SBUF=((char*)&x)[0];<br />SBUF=((char*)&x)[1];<br />SBUF=((char*)&x)[2];<br />SBUF=((char*)&x)[3];<br />接收时,刚好倒过来。<br /><br />更有趣的是,对于数组形式,数组名和后面的偏移量可以随便换。<br />char buff[10];<br />//或者用 char *buff=&buffer;<br /><br />buff[3]=0xaa;<br />3[buff]=0xaa; //居然是一样的,倒塌...<br /><br />因此,我认为编译器是这么干的:对于形如xxx[yyy]这样的表达式,会转化为*(xxx+yyy),<br />因此写成xxx[yyy]或者写成yyy[xxx]都无所谓了...非典用法,请勿乱用,出了事偶不负责...<br /><br /> <br /><br />(By computer00 @ http://computer00.21ic.org@2007-08-22)<br /> <br /><br /><br /> <br /> 相关链接:<a href='http://computer00.21ic.org/user1/2198/archives/2007/41252.html'>http://computer00.21ic.org/user1/2198/archives/2007/41252.html</a>
|