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

2007-8-22 10:08 5995 9 12 分类: 软件与OS

在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]都无所谓了...非典用法,请勿乱用,出了事偶不负责...


 


(By  computer00 @ http://www.ednchina.com/Blog/computer00/ @2007-08-22)

PARTNER CONTENT

文章评论3条评论)

登录后参与讨论

computer00 2008-7-2 21:35

哈哈~~~那样也是不会错的~~~ 因为yyy[xxx]相当于(yyy+xxx),而加法运算对指针来说,本来就是要按照数据类型来操作的。 就像你所说的float类型指针,如果float型指针yyy的值为1000,yyy+3的结果实际上是1000+3*sizeof(float)。如果float是四字节的话,那么就是1012。也就是说,不管你写成3+yyy或者yyy+3,结果都是1012。同理,写成yyy[3]或者3[yyy]也都是1012。不信你可以自己去验证。

用户579094 2008-7-2 20:20

因此,我认为编译器是这么干的:对于形如xxx[yyy]这样的表达式,会转化为*(xxx+yyy), **************************************** 在编译时,对数组元素a[i]就是按照*(a+i)处理来的,即按数组首元素的地址加上相对位移量得到要找的元素的地址,然后找到该单元的内容。[]实际上是变址运算符,即将a[i]按a+i计算地址,然后找出此地址的值。 这是书上的讲的内容 ======================================= 因此写成xxx[yyy]或者写成yyy[xxx]都无所谓了 *************************************** 对于char型是可以的(因为一个字节!),但是对例如float型的数组就出问题了。 float xxx[yyy];//假设float为4字节 xxx=1000,yyy=3 那么xxx[yyy]的地址:1000+3*4=1012; 如果yyy[xxx]的地址:3+1000*4=4003; 个人想法

用户1113004 2007-9-8 10:29

假如谁这样用了估计别人也是没有办法看的明白的

相关推荐阅读
computer00 2013-06-05 16:27
[招聘]Android系统开发工程师
任职要求: 1. 扎实的C/C++基础,熟悉嵌入式Linux和Android操作系统的软件开发; 2. 良好的沟通能力和逻辑思维能力; 3. 良好的英文文献阅读能力; 4. 具备...
computer00 2013-06-04 09:26
[招聘]Android应用开发工程师
任职要求: 1. 具备扎实的面向对象编程思想和JAVA编程基础; 2. 熟悉Eclipse+ADT开发环境,熟练掌握Android基本类库; 3. 熟悉网络应用和多媒体应用开发; ...
computer00 2012-09-26 13:15
圈圈的新浪官方围脖
http://weibo.com/computer00  ...
computer00 2012-09-26 13:12
欢迎大家去收听圈圈弹的曲子
http://www.tudou.com/home/_105209016  ...
computer00 2009-06-29 15:07
《圈圈教你玩USB》勘误(更新日期2009 年06月29日)
《圈圈教你玩USB》勘误(更新日期2009 年06月29日)下载地址1:下载地址2: 勘误.pdf...
computer00 2009-06-25 11:23
一块磐正845GE主板PS2接口的修复
圈圈有一部台式机,某天开机时,发现键盘用不了了,停留在输入BIOS密码那里。主机自检通过,但是蜂鸣器却发出很微弱的、连续的声音,同时键盘的三个LED也没有出现象往常一样的闪烁一下。圈圈以为多日未用,积...
我要评论
3
9
关闭 站长推荐上一条 /3 下一条