C语言中指针和数组名小趣
2007-09-06 16:23
351 查看
在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]都无所谓了...非典用法,请勿乱用,出了事偶不负责...
例如
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]都无所谓了...非典用法,请勿乱用,出了事偶不负责...
相关文章推荐
- C语言,数组与指针:int (*)p[4]; int *q; int a[4]; int b[3][4];
- 读陈浩的《C语言结构体里的成员数组和指针》总结,零长度数组
- C语言--指针与数组
- c语言数组和指针差别——定义和申明不同造成的影响
- C语言数组与指针一本道来
- C语言中字符数组和字符串指针分析(转载)
- C语言数组和指针的不同
- C语言中的数组指针
- c/c++(疑3) C语言指针与数组之间关系
- C语言中字符数组和字符串指针分析
- C语言面试题——指针与数组
- 数组和指针————C语言学习笔记1
- C语言 指针与数组
- C语言7之数组指针与指针数组
- C语言中字符数组和字符串指针分析
- C语言学习历程(八)数组和指针的关系及几个程序
- 黑马程序员--C语言自学笔记---11数组、指针、推箱子小游戏
- 解读C语言中函数指针数组构成的复杂定义
- C语言指针详解-----数组与指针
- C语言特性(指针数组和指向指针变量的指针)