weixin_51114263 2022-12-26 21:53 采纳率: 65%
浏览 56
已结题

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

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

#include<iostream>
#include<vector>

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;

}

求指教【抱拳】

  • 写回答

4条回答 默认 最新

  • ChatGPTᴼᴾᴱᴺᴬᴵ 2022-12-26 22:05
    关注

    在这个程序中,在调用函数 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] 的值。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 1月5日
  • 已采纳回答 12月28日
  • 创建了问题 12月26日

悬赏问题

  • ¥50 切换TabTip键盘的输入法
  • ¥15 关于#网络安全#的问题:求ensp的网络安全,不要步骤要完成版文件
  • ¥15 可否在不同线程中调用封装数据库操作的类
  • ¥15 微带串馈天线阵列每个阵元宽度计算
  • ¥15 keil的map文件中Image component sizes各项意思
  • ¥20 求个正点原子stm32f407开发版的贪吃蛇游戏
  • ¥15 划分vlan后,链路不通了?
  • ¥20 求各位懂行的人,注册表能不能看到usb使用得具体信息,干了什么,传输了什么数据
  • ¥15 Vue3 大型图片数据拖动排序
  • ¥15 Centos / PETGEM