C语言数组下标是负数

简介:    1 #include 2 #include 3 using namespace std; 4 5 int main(int argc, char *argv[]) 6 { 7 int a[10]; 8 int i, j, k; 9 ...

  

 1 #include <iostream>
 2 #include <cstdio>
 3 using namespace std; 
 4 
 5 int main(int argc, char *argv[]) 
 6 {
 7    int a[10];
 8    int i, j, k;
 9    int *p = NULL;
10    
11    for (i=0; i<10; i++)
12        a[i] = i + 10;
13        
14    printf("Using a...\n");
15    for (i=0; i<10; i++) 
16        printf("%d ", a[i]);
17    printf("\n");
18    
19    printf("Using p...\n");
20    p= a + 1;
21    for (i=-1; i<9; i++) 
22        printf("%d ", p[i]);
23    printf("\n");
24    
25    while(1);
26    return 0;
27 }

  上例中把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

目录
相关文章
|
1月前
|
C语言
在C语言中数组作为函数参数的应用与示例
在C语言中数组作为函数参数的应用与示例
15 0
|
1月前
|
C语言
【进阶C语言】数组笔试题解析
【进阶C语言】数组笔试题解析
17 0
|
1月前
|
存储 C语言 索引
C语言数组
C语言数组
14 0
|
1月前
|
存储 算法 数据挖掘
C语言中如何快速找出数组最大值下标
C语言中如何快速找出数组最大值下标
|
1月前
|
C语言 开发者
C语言中如何精确实现数组元素的插入
C语言中如何精确实现数组元素的插入
|
20天前
|
编译器 程序员 C语言
【C语言】变长数组,二分查找和数组之间自动替换的实现
【C语言】变长数组,二分查找和数组之间自动替换的实现
|
20天前
|
存储 C语言
【C语言数组】创建、初始化、以及使用2
【C语言数组】创建、初始化、以及使用
|
1月前
|
存储 程序员 C语言
C语言中的结构体数组
C语言中的结构体数组
9 0
|
1月前
|
存储 C语言 索引
C语言一维数组
C语言一维数组
13 1
|
1月前
|
存储 编译器 C语言
【c语言 】数组入门
【c语言 】数组入门
30 0