这个程序在c中数组的开头插入的输出是什么?原因是什么?
输出是 12 1. 2. 3. 4. 5. 12 为什么? 这样做时,阵列内存没有问题这个程序在c中数组的开头插入的输出是什么?原因是什么?,c,C,输出是 12 1. 2. 3. 4. 5. 12 为什么? 这样做时,阵列内存没有问题 #include<stdio.h> #include<conio.h> void main() { int a[]={1,2,3,4,5,6}; int num,i; for(i=6;i>0;i--) { a[i]=a[i-1]; } printf("enter any no, "); scanf("%d
#include<stdio.h>
#include<conio.h>
void main()
{
int a[]={1,2,3,4,5,6};
int num,i;
for(i=6;i>0;i--)
{
a[i]=a[i-1];
}
printf("enter any no, ");
scanf("%d",&num); // input 12
a[0]=num;
for(i=0;i<=6;i++)
{
printf("\n\n%d",a[i]);
}
getch();
}
数组的内存是相同的,但输出是12 1 2 3 4 5 6现在输出是更改的
那么,当我们使用scanf时,为什么输出不同呢
不存在未定义行为的错误,也不存在数组长度的错误
请告诉我使用scanf时发生这种情况的原因???这是一种未定义的行为,因为您试图访问超出边界的数组
C11标准说明:
J.2未定义的行为
数组下标超出范围,即使对象明显不在范围内
可以使用给定的下标访问,如左值表达式中所示
a[7]鉴于a[4][5]6.5.6中的声明
意味着任何事情都可能发生。程序可能会崩溃或不产生任何结果或打印预期输出。分析代码:
#include<stdio.h>
#include<conio.h>
void main()
{
int a[]={1,2,3,4,5,6};
int num,i;
for(i=6;i>0;i--)
{
a[i]=a[i-1];
}
printf("enter any no, ");
//scanf("%d",&num);
a[0]=12;
for(i=0;i<=6;i++)
{
printf("\n\n%d",a[i]);
}
getch();
}
根据C标准,它的定义不明确,不推荐。< /P>如果是C,比标记C++不合适。反之亦然。这是未定义的行为。您有未定义的行为,因为数组arr在索引6处没有第7个元素。索引范围为0到5。@AshishVerma您可以尝试打印任何索引。但是,如果在为数组定义的区域之外使用索引,则会调用未定义的行为。这意味着任何事情都有可能发生。你可能会被鼻魔折磨@阿什什-没有任何解释。对于未定义的行为,任何事情都可能发生,包括显示您期望的内容。或者完全不同的东西。没有规则。不,如果我们这样做,a[0]=12;完全是work@AshishVerma在您的代码中,isory先生,但在c中,您可以打印数组的任何索引号,就像您可以清除int arr[5]这样的数组一样;在此之后,在10号索引上插入值,如arr[10]=20,然后打印arr[10]ans20@AshishVerma未定义的行为意味着任何事情都可能发生@AshishVerma-阅读K&R C的书,因为它被提到。输出可以是任何东西。它不符合逻辑,对于某些设备,您可以提出一种逻辑,但对于其他设备,它可能会失败。这就是为什么undefined Behavior想在数组的开头插入您想插入的内容?任何数字都可以在控制台上输入[0]=num;从用户处获取编号并将其分配给作为第一个索引的a[0]。
void main()
{
int a[]={1,2,3,4,5,6}; //Array of 5 elements
int num,i;
//for(i=6;i>0;i--) //i. Bound Checking Error.
for(i=5; i>0; i--) //correct.
{
a[i]=a[i-1]; //Trying to insert element 6 value over element 5. However you have only 5 elements in consecutive memory location. In i. Reference`
}
printf("enter any no, ");
scanf("%d",&num); // insert 12
a[0]=num;
for(i=0;i<=6;i++) // you have only 5 elements trying to access 6 elements.
{
printf("\n\n%d",a[i]);
}
getch();
}