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日

悬赏问题

  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改
  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持