插入一维数组的算法,这里发生了什么?
Algorithm for insertion in one-dimensional array, what is happening here?
#include <stdio.h>
int main()
{
int arr[5], size, i, pos, elem;
printf("Enter the size of array(less than 100)\n");
scanf("%d",&size);
printf("\nEnter the elements of array one by one\n");
for ( i = 0; i < size; i++)
scanf("%d",&arr[i]);
printf("\nEnter the position of insertion\n");
scanf("%d",&pos);
printf("\nEnter the element\n");
scanf("%d",&elem);
for ( i = size - 1 ; i >= pos - 1; i--)
arr[i + 1] = arr[i];
arr[pos - 1] = elem;
printf("\nInserted array is\n");
for ( i = 0; i <= size; i++)
printf("\t%d",arr[i]);
printf("\n");
return 0;
}
由于数组是 int arr[5],因此不可能在 [0,1,2,3,4] 范围以外的任何索引处插入元素。为什么我可以在 arr[6] 插入并得到正确答案?
越界访问数组会导致未定义的行为。
你可能会看到它有时工作,有时可能不工作。(你可能最终会 崩溃 甚至)
因此,请按照标准进行操作,停止越界访问数组。
摆脱 未定义的行为
您正在写入未分配的内存。最终,当您访问您没有写入权限的内存时,您将遇到分段错误。
C/C++ 不会像 Java 等其他语言那样为您进行边界检查。它留给操作系统来确定您何时访问不应该访问的内存。
#include <stdio.h>
int main()
{
int arr[5], size, i, pos, elem;
printf("Enter the size of array(less than 100)\n");
scanf("%d",&size);
printf("\nEnter the elements of array one by one\n");
for ( i = 0; i < size; i++)
scanf("%d",&arr[i]);
printf("\nEnter the position of insertion\n");
scanf("%d",&pos);
printf("\nEnter the element\n");
scanf("%d",&elem);
for ( i = size - 1 ; i >= pos - 1; i--)
arr[i + 1] = arr[i];
arr[pos - 1] = elem;
printf("\nInserted array is\n");
for ( i = 0; i <= size; i++)
printf("\t%d",arr[i]);
printf("\n");
return 0;
}
由于数组是 int arr[5],因此不可能在 [0,1,2,3,4] 范围以外的任何索引处插入元素。为什么我可以在 arr[6] 插入并得到正确答案?
越界访问数组会导致未定义的行为。
你可能会看到它有时工作,有时可能不工作。(你可能最终会 崩溃 甚至)
因此,请按照标准进行操作,停止越界访问数组。 摆脱 未定义的行为
您正在写入未分配的内存。最终,当您访问您没有写入权限的内存时,您将遇到分段错误。
C/C++ 不会像 Java 等其他语言那样为您进行边界检查。它留给操作系统来确定您何时访问不应该访问的内存。