其他分享
首页 > 其他分享> > 数组下标的那些事

数组下标的那些事

作者:互联网

1.大多数编程语言数组的下标为什么是从0开始?

从数组存储的内存模型来看,“下标”的确切定义应该是 “偏移”(offset)。

a[0]就是相对于首地址偏移为0的内存地址,a[k] 就是相对于首地址偏移k 个 type_size 的内存地址。
这样就能解释上篇提到的寻址公式:

a [k] _address = base_address + k * type_size

其实这也是一个大家认可度比较高的一种说法,也有人认为大多数编程语言下标从0开始是C语言的影响力造成的,由于C语言的普及人们习惯了下标从0开始的写法,所以之后的大多数语言下标索引仍然遵从从0开始。当然,也有一些下标不是从0开始的,比如matlab。

2.不常用索引方式

好像现在C语言也支持下标为负数的索引了,比如以下代码利用负数索引来赋值。

#include <stdio.h>
int main(){
    int a[3];
    for (int i = -1 ; i>=-3 ; i--) 
    {a[i] = i;

    printf("%d\n",a[i]);
    }
    return 0;
}

输出结果:

-1
-2
-3

这段代码执行起来是没毛病的,果然与时俱进啊,nice!
但是,产生负数下标索引的实际意义是是什么呢?
令人难以琢磨~

3.C编译不检查数组下标问题的恶心机制

#include<stdio.h>
int main(){
    int a[10];
    for(int i = 0; i < 10; i++){
        a [i] = i; //对数组赋值
        
    }
    a[10] = 10; 

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

    printf("%d\n",a[10]);

    return 0;

}

对a[10]赋值不是越界的操作嘛,怎么还合法了呢?

还记得上篇中数组越界一个单位,会出现什么结果吗?想想为什么??

电子书推荐

---->「Pro+Git+第二版(中文版).pdf」
链接:https://www.aliyundrive.com/s/p7jC9BE8TRf

标签:10,下标,int,C语言,那些,索引,标的,数组
来源: https://www.cnblogs.com/mmzwx/p/15860276.html