簡體   English   中英

為什么在移動元素后我在索引 arr[2] 處得到 '1' 作為數組的最后一個元素

[英]why am I getting '1' as last element of the array at index arr[2] after shifting the elements

為什么在移動元素后我在索引 arr[2] 處得到“1”作為最后一個輸出

#include <iostream>
using namespace std;

void shifting(int* arr)
{
    int i, j;
    for (i = 0; i < 3; i++)
    {
        arr[i] = arr[i + 1];
    }

    for (i = 0; i < 3; i++)
    {
        cout << arr[i] << endl;
    }
}

int main()
{
    int array[n] = { 5, 2, 3 };
    shifting(array);       //shifting the elements to left side 
    return 0;
}

輸出:2 3 1

你轉移的方式是錯誤的。 正確的方法是將值存儲在臨時元素中,然后移位。

例如。

temp=arr[0]
for (i = 0; i < 3; i++)
    {
        arr[i] = arr[i + 1];
    }

在這里添加 arr[2]=temp

您正在在線索引一個越界數組

arr[i] = arr[i + 1];

i=2時,右側計算為 arr[3],超出范圍。

這會產生未定義的錯誤行為。 在這個問題上,人們已經更好地回答了這個問題。

這在 C++ 中被稱為未定義行為,您移動的方式是將數組索引到邊界之外,這意味着您正在嘗試訪問數組中不存在的元素。

這取決於您希望最后一個值是什么。 如果希望數組輸出 2、3、5:

  • 將第一個元素(arr [0])存儲在臨時變量中
  • 像您一樣遍歷數組,但在第 (n-1) 個元素處停止,即 (i < n-1)
  • 然后將臨時值存儲在 arr[n-1] 中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM