2017-10-10 28 views
-7

我不知道我在做什么错了我的程序,所以它不会输出它的意思输出。使用C++在数组中插入值时出现奇怪的异常/错误

我写了一个程序插入值到数组中特定的点,它的工作原理与此代码精致漂亮,

#include <iostream> 
using namespace std; 

main() { 
    int arr[] = {1,3,5,7,8}; 
    int item = 10, k = 3, n = 5; 
    int i = 0, j = n; 

    cout<<"The original array elements are :\n"; 

    for(i = 0; i<n; i++) { 
     cout<<"arr["<<i<<"] = "<< arr[i] <<"\n"; 
    } 

    n = n + 1; 

    while(j >= k) { 
     arr[j+1] = arr[j]; 
     j = j - 1; 
    } 

    arr[k] = item; 

    cout<<"The array elements after insertion :\n"; 

    for(i = 0; i<n; i++) { 
     cout<<"arr["<<i<<"] = "<< arr[i] <<"\n"; 
    } 
} 

以下是该程序的输出:

enter image description here

但如果我改变阵列大小即7,那么这将发生:

#include <iostream> 
using namespace std; 

main() { 
    int arr[] = {1,3,5,7,8,9,6}; 
    int item = 10, k = 3, n = 7; 
    int i = 0, j = n; 

    cout<<"The original array elements are :\n"; 

    for(i = 0; i<n; i++) { 
     cout<<"arr["<<i<<"] = "<< arr[i] <<"\n"; 
    } 

    n = n + 1; 

    while(j >= k) { 
     arr[j+1] = arr[j]; 
     j = j - 1; 
    } 

    arr[k] = item; 

    cout<<"The array elements after insertion :\n"; 

    for(i = 0; i<n; i++) { 
     cout<<"arr["<<i<<"] = "<< arr[i] <<"\n"; 
    } 
} 

输出上述程序的:

enter image description here

我无法理解的是什么,在哪里我做错了有这等程序异常/错误。

+0

什么downvoting东西你不点t甚至费心去阅读,哪一个实际上是一个问题,并且需要真正的帮助,因此我知道stackoverflow的标准,因此请避免将我的问题推迟到关闭状态,除非您有充分的理由证明这是一个偶然或错误的问题。 –

+0

数组的大小在编译时固定。试图超出分配数组的最后一个元素,导致未定义的行为。 – Dan

+1

什么不正常?你期望输出什么? – user463035818

回答

2

只保留重要的部分,你的代码是多还是少这样的:

int arr[] = {1,3,5,7,8,9,6}; 
    int n = 7; 
    n = n + 1; 
    for(i = 0; i<n; i++) { 
    cout<<"arr["<<i<<"] = "<< arr[i] <<"\n"; 
    } 

阵列具有固定的大小。你不能改变它,因此你也不能“插入”一个元素到数组中。您的arr有7个元素,当您访问arr[7](在循环内部)时,您正在访问数组的边界。这是未知的行为,你的代码可以输出任何东西。

如果你想插入元素到一个动态大小的数组,然后看看std::vector

3
int arr[] = {1,3,5,7,8}; 

该数组的大小为5,因为它的初始值设定项有5个元素。 只有获得一个额外元素的数组是字符串文字:​​是一个4 char的数组,其中0作为第四个元素。这个数组不是字符串文字。当代码写入数组的末尾时,程序的行为是未定义的。

您可以在阵列说,它确实有六大要素:

int arr[6] = {1,3,5,7,8}; 

这个数组中最后一个元素的值是0。

相关问题