C语言之数组越界

C语言之数组越界C语言难点:数组越界今天巨星给大家讲一讲数组越界…数组的定义数组组成:函数类型,数组名,[数组长度];PS:数组长度必须是常量,c99允许变量使用,vs编译器不允许,例:intb=10;intarr[b]//c99允许,vs不可以;例如:intarr[10]表示的是函数类型为int,长度为10的数组arr;注意:数组在使用时没有函数类型,而且[数组下标],例如:arr[0]=1表示…

C语言难点:数组越界

今天巨星给大家讲一讲数组越界…

  1. 数组的定义
    数组组成:函数类型,数组名,[数组长度];PS:数组长度必须是常量,c99允许变量使用,vs编译器不允许,例:int b =10;int arr[b]//c99允许,vs不可以;例如:int arr[10]表示的是函数类型为int,长度为10的数组arr;注意:数组在使用时没有函数类型,而且[数组下标],例如:arr[0]=1表示数组arr下标为0的数组元素为1,这个0就是下标;只有定义的时候是有数据类型和[数组长度];
  2. 数组初始化
    a.int arr[10]={1,2,3,4,5,6,7,8,9,10};用花括号将数组元素全部初始化;
    b.int arr[10]={1,2,3,4,5};数组元素初始化一部分,注意剩余的部分(也就是没有初始化的部分)为0;即输出数组arr[10]的值为1,2,3,4,5,0,0,0,0,0;
    c.int arr[ ]={1,2,3,4,5,6,7,8};没有定义数组长度,数组长度自动定义为8即刚好容纳初始化的所有元素;这种初始化数组的方法比较好用;
  3. 数组越界难点
    先简单看一个例子,int arr[10];arr[10]=1;//数组越界;数组的长度为10,数组下标从0开始,所以长度为10的数组下标最大到9,因此数组下标为10就是数组越界;粗看很简单,但很容易出错;
    再来看一下下面的代码:
#include <stdio.h>
int main()
{
int i;
int arr[10];
for(i=0;i<=10;i++)
{
arr[i]=0;
printf("%d\n",i);
}
return 0;
}

分析:首先定义i,根据数据结构栈可知i放在栈底(地址高),数组后定义放在栈顶(地址低)数组arr[10]的数组元素从栈顶依次从0到9往下,i放在栈底;然后进入for循环,i从0开始,然后数组arr[0]赋值为0,依次类推,直到i=9,arr[9]=0,i++变成10,arr[10]=0,数组找不到10号元素就把i当做10号元素,i就赋值为0;程序陷入死循环;看关系:
i=0; arr[0]=0;printf i=0;
i=1; arr[1]=0;printf i=1;
i=2; arr[2]=0;printf i=2;
i=3; arr[3]=0;printf i=3;
i=4; arr[4]=0;printf i=4;
i=5; arr[5]=0;printf i=5;
i=6; arr[6]=0;printf i=6;
i=7; arr[7]=0;printf i=7;
i=8; arr[8]=0;printf i=8;
i=9; arr[9]=0;printf i=9;
i=10; arr[10]=0;printf i=0;//i又从0开始进入循环,因此程序陷入死循环,这就是数组越界;注意:C语言数组越界时,vs编译器会自动埋下两颗地雷,当数组越界时,系统就会崩溃,无法编译;但可以人为改动,在for循环中加入if语句 (if(i == 10){i+=2;}) 此时编译运行就会陷入死循环;

编译结果图:
图一:数组越界时vs编译系统崩溃;
C语言之数组越界
图二:加入if语句跳过地雷,编译死循环;
C语言之数组越界


以上就是数组越界的大概内容,希望对大家有所帮助…

巨星出品


今天的文章C语言之数组越界分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/12955.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注