啥操作也没有的函数,参数一传进去值就变了
这什么情况?赛博鬼打墙?
#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行加个换行。