数组边界

                                                                                                                                                                                                                                                                                        

 

           

解决问题:

数组下标超出边界的测试。

分析:

创建一个内含4个元素的的数组,错误地使用-1~6的下标。

代码如下:

#include 
       
       
        
        
#define SIZE 4
int main(void)
{
    int value1 = 44;
    int arr[SIZE];
    int value2 = 88;
    int i;
    
    printf("value1 = %d, value2 = %d\n", value1, value2);
    for (i = -1; i < SIZE; i++)
        arr[i] = 2 * i + 1;
        
    for (i = -1; i < 7; i++)
        printf("%2d %d\n", i, arr[i]);
    printf("value1 = %d, value2 = %d\n", value1, value2);
    printf("address of arr[-1] : %p\n", &arr[-1]);
    printf("address of arr[4] : %p\n", &arr[4]);
    printf("address of value1 : %p\n", &value1);
    printf("address of value2 : %p\n", &value2);
    
    return 0;
    
        
}
       
       
运行结果如下:


分析:

该编译器似乎把value2储存在数组的前一个位置,把value1储存在数组的后一个位置。

在上面的输出中,arr[-1] 和 value2对应的内存地址相同,arr[4] 和 value1对应的内存地址相同。

因此可得到结论,越界的数组下标会导致程序改变其他变量的值。


主要原因:

C不检查边界,来使程序运行更快。


得到结论:

数组元素的编号从0开始,最好在声明数组时使用符号常量来表示数组的大小。

修正的结果如下:


可以知道变量的值没有被改变。





            

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值