数组可以在C中保存超出边界的值

数组可以在C中保存超出边界的值,c,arrays,C,Arrays,嗨,我在C中实现bubblesort,遇到了一些我无法理解的问题 #include <stdio.h> #include <time.h> void main(){ int i; int j; int vahe; int sisse; int lst[50]; printf("Enter how many elements you want to sort:"); scanf("%d",&sis

嗨,我在C中实现bubblesort,遇到了一些我无法理解的问题

#include <stdio.h>
#include <time.h>
void main(){

    int i; 
    int j; 
    int vahe; 
    int sisse;
    int lst[50]; 


    printf("Enter how many elements you want to sort:");
    scanf("%d",&sisse); 

srand(time(NULL)); 
    for(i=0;i<sisse;i++){
        lst[i]=rand() % 1000; 

    }




    for(i=sisse-2;i>=0;i--){ 
        for(j=0;j<=i;j++){    
            if(lst[j]>lst[j+1]){ 
                vahe=lst[j]; 
                lst[j]=lst[j+1];
                lst[j+1]=vahe;
            }
        }
    }

    printf("Result: ");
    for(i=0;i<sisse;i++){
        printf("%d ",lst[i]);
    }




}
#包括
#包括
void main(){
int i;
int j;
内瓦赫;
int sisse;
int lst[50];
printf(“输入要排序的元素数:”);
scanf(“%d”&sisse);
srand(时间(空));
对于(i=0;i=0;i--){
对于(j=0;jlst[j+1]){
vahe=lst[j];
lst[j]=lst[j+1];
lst[j+1]=vahe;
}
}
}
printf(“结果:”);

对于(i=0;i如果您访问数组超出范围,则您已经处于未定义的行为区域。您无法在该点对其行为进行推理。

这是因为数组的工作方式类似于指针。事实上,数组变量只不过是指向内存中某个位置的地址(第一个特定元素)。现在,如果您这样做:
array[5]
,您实际上是在说:获取
array
指向的地址并向其添加5。在运行时,这将只是执行;处理器不知道数组应该只包含(比方说)这对于编译器来说很重要,但是之后,您必须注意不要以编程方式超出边界


为什么您要关心程序何时还能运行?因为编译器希望您在数组中只存储4个元素,并且您将尽一切努力确保不会存储更多的元素。因此,编译器可能会使用第4个元素下面的内存,并将其保留给另一个变量。当您现在编写超出数组边界,您将覆盖所述变量的值。

C不会自动检测到访问数组边界以外的内容。您必须签入代码。可能会复制到C中的:no
ArrayIndexOutOfBoundException
。因此,为了修复此问题,我应该检查变量sisse是否小于或等于50如果不是的话,那就定为50?