值传递为什么会出现这种情况?

啥操作也没有的函数,参数一传进去值就变了
这什么情况?赛博鬼打墙?

#include
#include

using namespace std;



void TernarySearch(int a[], int Key, int l, int r)
{
    cout << Key << " ";
}



int main()
{
    int N = 0;

    cin >> N;

    vector<int>nums;

    for (int k = 0; k < N; k++)
    {
        int a[100];
        //输入数据
        for (int temp = 0; cin >> temp;)
        {
            nums.push_back(temp);
            if (cin.get() == '\n')
                break;
        }
        int len = nums.size();

        for (int i = 0; i < len; i++)
        {
            a[i] = nums[i];
        }
        nums.clear();

        cout << a[0];

        int K = 0;


        K = a[0];



        for (int i = 0; i < len - 1; i++)
        {
            a[i] = a[i + 1];
        }
        int l = 0;
        int r = len - 2;


        TernarySearch(a, len, l, r);
        cout << endl;


    }




    return 0;

}

求指教【抱拳】

在这个程序中,在调用函数 TernarySearch 时,函数的参数 Key 的值是通过将数组 a 的第一个元素的值赋给 K,然后将 K 传递给函数的。在函数调用之前,对数组 a 进行了一些操作,将 a 的第一个元素的值移到了数组的最后一个位置,并将其余的元素依次往前移动一位。这就是为什么 Key 的值会发生变化的原因。


在 C++ 中,函数的参数是以值传递的方式传递的。这意味着,在函数调用时,函数的参数实际上是将实参的值复制到形参的副本中的。对形参的修改不会影响实参的值。因此,在这个程序中,对数组 a 的修改并不会影响 Key 的值。


如果想要在函数调用时使用引用传递,可以使用 C++ 中的引用符号 & 来修改函数的参数定义。例如,可以将函数 TernarySearch 的参数 Key 定义为引用类型,如下所示:

void TernarySearch(int a[],int &Key,int l,int r) {
    cout << Key << " ";
}

这样,在函数调用时,Key 的值就会直接引用 a[0] 的值,对 Key 的修改也会影响 a[0] 的值。

已解决

在你这代码中,定义了一个函数TernarySearch,并在主函数中调用了这个函数。这个函数接受四个参数:a[]、Key、l、r。

在主函数中,你将a数组的第一个元素的值赋给了K,然后将K的值传给了TernarySearch函数的Key参数。之后,你将a数组的第一个元素的值更新为a数组的第二个元素的值。

由于函数调用时传入的参数是值传递(也就是说,函数内部操作的是参数的副本,而不是参数本身),因此TernarySearch函数内部的a数组并不会受到主函数中对a数组的修改的影响。这就是为什么TernarySearch函数中的Key参数传入之前的值,而不是传入之后被更新过的值。
望采纳。

41行加个换行。