数组下标为负数

        在使用数组的时候,相信大多数人首先想到的是“数组是从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

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值