C++ 返回引用

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的

以下代码的预期输出为“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的评论


    至于第二部分-请参阅@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++) {