一个C的小问题望高手解决
最近小弟看到一些奇怪的C代码,望高手解决。代码如下 :
char _a[10],_b[10];
*_a=2,_a[0][_a-1]=1[_b-1]=5;
(注:这些代码可以在VC++中编译并执行)
问题1:
_a[0][_a-1]
_a分明是一维数组为什么可以这样用;
问题2:
1[_b-1]是什么意思? 注:1是一个常数
我本人已经知道*_a就是a[0];
以上两问题望高手解决
问题点数:0、回复次数:10Top
1 楼kobefly(科比--网络学习中)回复于 2005-04-03 22:13:10 得分 0
#include <stdio.h>
int main()
{
char _a[10],_b[10];
*_a=2;
_a[0][_a-1]=1[_b-1]='5';
printf("%c %c", _a[1], _b[0]);
}
其实在c语言中
对于数组a[10]
要取出a[3],即可以用*(a+3),也可以是3[a]
因为最终的调用是a+3,然后根据a数组元素的类型,调整步长,然后取值的
在上边的代码中,就是用这个实现的
*_a=2;//这里首先将_a数组的首元素赋为2
_a[0][_a-1]=1[_b-1]='5';
_a[0][_a-1]=*(_a-1+_a[0]) = *(_a -1+2) =*(_a+1) =_a[1]
1[_b-1]= *(_b-1+1)=_b[0]
我将其赋值为'5'
是便于输出
我想你应该明白了
呵呵
Top
2 楼zengwujun(月之海 为linux入门奋斗100天)回复于 2005-04-03 22:14:49 得分 0
学习Top
3 楼pcboyxhy(-273.15℃)回复于 2005-04-03 22:20:16 得分 0
A[_b-1] // 相当于*(b+A-1)
这里的1[_b-1], 就是*b
_a[0][_a-1] //2[_a-1] == _a[1]Top
4 楼yemin2004(peter_ye)回复于 2005-04-03 22:36:55 得分 0
哈哈,果然强么。
Top
5 楼xiaoming889(小笨猫)回复于 2005-04-03 22:39:49 得分 0
大概知道是怎么回事了。
Top
6 楼xiaoming889(小笨猫)回复于 2005-04-03 22:40:33 得分 0
就是不知道为什么要这样写,直接写不好么?Top
7 楼YFY(天易)回复于 2005-04-03 22:40:50 得分 0
楼上 pcboyxhy(-273.15℃) 说的很清楚了,不过好像有下划线忘加。
A[_b-1] // 相当于*(_b+A-1)
这里的1[_b-1], 就是*_b
_a[0][_a-1] //2[_a-1] == _a[1]
Top
8 楼YFY(天易)回复于 2005-04-03 22:43:25 得分 0
不过没必要这样写吧,不会相让源码让人难以看懂吧,或是复用,为了最少的存储空间。Top
9 楼qifa(DoItNow)回复于 2005-04-03 23:02:47 得分 0
是啊,这样写的话可读性不是太好Top
10 楼mostideal(三甲)回复于 2005-04-03 23:43:55 得分 0
这样写的确太难看懂了Top




