数组下标为负数

        在使用数组的时候,相信大多数人首先想到的是“数组是从0开始的,数组的下标必须大于或等于0”,但是在处理一些数值计算的问题的时候,很可能会遇到下标为负数的问题,比如,在做9/7浮点小波变换的时候会有:x(m) =  x(-m) ,m<0,在这种情况下,当要循环迭代计算的时候,就需要判断m是否为负数,这个还是有点麻烦的。

        这个时候,如果我们知道m的最小值,比如-4的时候,就可以考虑直接让数组的下标为负数了,具体的操作是:为数组x分配空间的时候,为其多分配4个位置,然后声明一个指针指向x+4,然后让b(-i) = b(i) ,i属于[1,4],这样就可以在用到x的地方用b替代之,而不用检查下标的值了。但是,在这么做的时候一定要注意不要越界。

        这种用法的根据是C语言对数组和下标操作符的定义,C语言的数组其实是指针,而下标运算符其实解释成了指针加上偏移量,只是偏移量的单位是该指针的类型。

        比如,int a[20][43],a[4][7]等价于a+4*43+7,这就可以解释为什么上面的b[-3]为什么行得通了,b=x+4,则b[-3]等价于x+4-3,其实是数组x的第二个元素。

       


        关于下标运算符的更深的阐述可以看看http://blog.csdn.net/supermegaboy/article/details/4855000

你可能感兴趣的:(c,语言)