C++ 返回引用
以下代码的预期输出为“1-13 4 5 6”。 (C++ 返回引用,c++,c++11,C++,C++11,以下代码的预期输出为“1-13 4 5 6”。 (arr[1]=2应更改为arr[1]=-1)。当我运行这个代码时, 没有什么变化,我不明白为什么 如果“find”函数通过值而不是通过引用接收参数“seek”,那么会有什么区别? 当我声明“seek”是一个值时,程序没有运行(0xC0000005)。。。但为什么会发生这种情况 #包括 int&find(int arr[],int size,int&seek) { for(int i;i) 至于第二部分,请看@someprogrammerdude的
arr[1]=2
应更改为arr[1]=-1
)。当我运行这个代码时,
没有什么变化,我不明白为什么
#包括
int&find(int arr[],int size,int&seek)
{
for(int i;i)
至于第二部分,请看@someprogrammerdude的评论
至于第二部分-请参阅@Some programmer dude's comment如果您通过值传递参数seek
,它是find
函数中的局部变量。局部变量的生存期仅在函数中,一旦函数返回,它将超出范围。对该变量的引用将无效。请检查再次执行for循环。for(int i;ii)如果通过值传递参数seek
,则它是find
函数中的局部变量。局部变量的生存期仅在函数中,一旦函数返回,它将超出范围。对该变量的引用将无效。请再次检查for循环。(int i;iIt很容易无法获取此警告。使用-Wall-Wextra
的GCC(版本8.0.1)仅在与-O1
或更高版本一起使用时才会发出警告。很容易无法获取此警告。使用-Wall-Wextra
的GCC(版本8.0.1)仅在与-O1
或更高版本一起使用时才会发出警告。
#include <iostream>
int& find (int arr[], int size, int& seek)
{
for (int i; i<size; i++) {
if (arr[i]==seek) return arr[i];
}
return seek;
}
void print (int arr[], int size)
{
for (int i=0; i<size; i++) {
std::cout << arr[i] << " ";
}
std::cout << std::endl;
}
int main ()
{
int arr[]={1,2,3,4,5,6};
int size = sizeof arr / sizeof *arr;
int seek=2;
find (arr, size, seek) = -1;
print(arr, size);
return 0;
}
for (int i; i<size; i++) {
for (int i = 0; i<size; i++) {