当前位置: 首页 >> 程序设计 >> C语言处理从负数开始数组
 

C语言处理从负数开始数组

作者:      来源:     发表时间:2007-07-23     浏览次数:      字号:    

编程时我们经常会遇到处理边界问题的情况,这时数组的下标可能是从负数开始的。通常的方法是将边界分离出来单独处理,但这样比较麻烦,程序读起来也比较费力。那么能不能直观的用负数作为下标呢?
 
C语言中数组下标必须是从0开始的,但C语言中的指针操作给我们提供了解决负数下标问题的方法。看下面一个示例:
 

#include <stdio.h>

int main(int argc, char *argv[])
{
    int a[10];
    int i, *p;

    for (i=0; i<10; i++)
    {
        a[i] = i + 10;
    }

    printf("Using a...\n");
    for (i=0; i<10; i++)
    {
        printf("%d ", a[i]);
    }
    printf("\n");

    printf("Using p...\n");
    p = a + 1;
    for (i=-1; i<9; i++)
    {
        printf("%d ", p[i]);
    }
    printf("\n");

    return 0;
}

上例中把a+1的值(地址)赋给p后,p[-1]=*(p+(-1))=*(a+1-1)=*(a+0)=a[0]。

可见,通过指针,可以使用负数下标。但有两点要注意:


一、如果下标是从负数开始的,那么下标上界也要做相应的变动


二、如果数组是动态申请的,则撤销数组所占内存时要free(a)而不是free(p),因为a才真正指向数组空间的首地址。

 

责任编辑 webmaster

 
 
 
 
 
评论更多>>
 
 
 
发表
 
姓名: QQ:
性别: MSN:
E-mail: 主页:
评分: 1 2 3 4 5
评论内容:
验证码:
  
  • 请遵守《互联网电子公告服务管理规定》及中华人民共和国其他各项有关法律法规。
  • 严禁发表危害国家安全、损害国家利益、破坏民族团结、破坏国家宗教政策、破坏社会稳定、侮辱、诽谤、教唆、淫秽等内容的评论 。
  • 用户需对自己在使用本站服务过程中的行为承担法律责任(直接或间接导致的)。
  • 本站管理员有权保留或删除评论内容。
  • 评论内容只代表网友个人观点,与本网站立场无关。
  •