在c程序中,我们可以初始化一个数组,比如int-array[10]
。所以它可以存储10个整数值。但当我使用循环给出输入时,它接受的输入超过10个,并且没有显示任何错误。到底发生了什么??
#include<stdio.H>
main()
{
int array[10],i;
for(i=0;i<=11;i++)
scanf("%d",&array[i]);
for(i=0;i<10;i++)
printf("%d",array[i]);
}
C语言标准没有规定如何在内存中分配变量。
因此,理论上的答案是,您正在执行不安全的内存访问操作,这将导致未定义的行为(任何情况都可能发生)。
然而,从技术上讲,所有编译器都在堆栈中分配局部变量,在数据部分分配全局变量,因此实际的答案是:
>
在本地数组的情况下,要么重写其他一些本地变量,要么执行非法的内存访问操作。
对于全局数组,您将重写其他全局变量或执行非法的内存访问操作。
执行任何数组边界检查都不需要C编译器和运行时。
你所描述的是导致未定义行为的一整类编程错误的例子。来自维基百科:
在计算机编程中,未定义行为是指其行为被指定为任意的计算机代码。
这意味着该程序可以随心所欲地(或不)做出不当行为。
在实践中,当写入超过数组末尾时,以下任何情况都有可能发生:
(这不是一份详尽的清单。)
有一些工具,比如Valgrid,可以帮助发现和诊断这类错误。
因为C不做任何数组边界检查。作为一名程序员,你有责任确保你的索引不超出范围。
根据使用的编译器和代码运行的系统,您可能会从内存中读取随机数据,或者在读/写越界时最终得到SIGSEGV。
数组是编程语言中用来存储元素的集合。在 C 语言中,集合是储存相同类型元素的集合。并且可以通过一个名称来来访。 -------------------------------------------- | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | …… | N-1 | -------------------------------------------- 第一个元素
数组是一种内存分配的形式,数组是定义了一个连续的空间,与指针类似。 数组定义方式 类型 数组名[数组大小];//类型为每个空间的大小,我们通过数组名和下标访问数据,数组名指向存储数据的首地址,但是我们不可以改变数组名指向的地址。数组大小只有在定义的时候生效,定义之后不可以被改变。 int a[100]; //申请了一个名叫a的数组,它包含了100个整型。 数组的访问 我们可以通过数组的下标访问数
我一直在尝试用C语言编写一些碰撞检测代码,下面是我目前拥有的函数,它在每帧调用一次,但是由于某些原因,当两个精灵重叠时,碰撞不起作用 任何指向正确方向的指示都将不胜感激
问题内容: 我正在尝试检查2D数组中每个元素的相邻值,但是当我到达数组的边或角落时,得到了IndexOutOfBoundsException。例如,如果我的数组是: | 2 | 4 | 2 | 7 | 8 | | 8 | 1 | 0 | 5 | 6 | | 0 | 3 | 1 | 5 | 2 | | 1 | 9 | 7 | 2 | 0 | 我知道8的所有邻居都是7,5和6,但是我的陈述并没有正确检
本文向大家介绍C语言二维数组中的查找的实例,包括了C语言二维数组中的查找的实例的使用技巧和注意事项,需要的朋友参考一下 C语言二维数组中的查找的实例 题目描述:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数 思路描述:一个数字的下方和右方是比它本身大的区域,而左方和上方时比它本身小
C 语言中的多维数组与我们在数学中学习到的多维数组是一致的。如果你还不知道什么是多维数组也没有关系。多维数组可以看成是之前学习过的数组的扩展。它能让你完成一些仅仅依靠一维数组没有办法完成的事情。让很多事情完成的更为简单。 1. 多维数组的声明 多维数组可以看作是一维数组的扩展。所以,它的声明就是在之前学习的数组,也叫一维数组,之后继续添加大括号,如果添加一组大括号,那么称之为二维数组,以此类推,就