您的位置:首页 > 编程语言 > C语言/C++

C语言数组下标是负数

2013-04-16 21:53 387 查看
  

#include <iostream>
#include <cstdio>
using namespace std;

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

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");

while(1);
return 0;
}


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

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

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

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

  http://blog.csdn.net/heli007/article/details/7452628
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: