鱼C论坛

 找回密码
 立即注册
查看: 712|回复: 2

[已解决]c++函数内再赋值并返回问题

[复制链接]
发表于 2020-4-12 10:40:17 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 FISHER666 于 2020-4-12 12:09 编辑

提问,为什么整型数组再次赋值并返回,还是原来那个数组? 问题来源于33到40行代码
# include <iostream>
# include <cstdlib>
# include <ctime>
using namespace std;

// 为了return数组,必须定义指针函数 
int *range(int arr[10]);


//冒泡排序找最大值,为了保证普适性,其数组长度应该为输入的数组长度相同 
int *range(int arr[], int num) 
{
        int arr1[num];
        
        for (int k = 0;k < num;k++)
        {
                arr1[k] = arr[k]; 
        }
        
        for(int i = 0; i < num - 1; i++)
        {
                for (int j = 0;j < num - i - 1; j++)
                {
                        if (arr1[j] > arr1[j+1]) //这里要打括号 
                        {
                                int temp = arr1[j];
                                arr1[j] = arr1[j+1];
                                arr1[j+1] = temp;
                        }        
                }
        } 

        // 反向复制一次,并返回
        
        for (int k = 0;k < num;k++)
        {
                arr[num] = arr1[num];
        }
        return arr;  
 } 
 
 int main()
 {
         int arr1[10];
         // 随机生成一维数组
         srand((int)time(NULL));  // 产生随机种子
    for (int i = 0; i < 10; i++)
    {
        arr1[i] = rand()%100;
    }
    for (int i = 0; i < 10; i++)
    {
        cout<<arr1[i]<<" ";
    }
    cout<<endl;
    // 获得排序后的数组
    int *arrA;
    arrA = range(arr1,10);
    for (int i = 0; i < 10; i++)
    {
        cout<<arrA[i]<<" "; 
    } 
    cout<<endl;

    system("pause");
    return 0;
 }
最佳答案
2020-4-12 16:15:42
# include <iostream>
# include <cstdlib>
# include <ctime>
using namespace std;

// 为了return数组,必须定义指针函数
int* range(int *arr,int num);


//冒泡排序找最大值,为了保证普适性,其数组长度应该为输入的数组长度相同
int* range(int *arr,int num)
{
    int* arr1 = new int[num];//数组动态分配

    for (int k = 0; k < num; k++)
    {
        arr1[k] = arr[k];
    }

    for (int i = 0; i < num - 1; i++)
    {
        for (int j = 0; j < num - i - 1; j++)
        {
            if (arr1[j] > arr1[j + 1]) //这里要打括号
            {
                int temp = arr1[j];
                arr1[j] = arr1[j + 1];
                arr1[j + 1] = temp;
            }
        }
    }

    // 反向复制一次,并返回

    for (int k = 0; k < num; k++)
    {
        arr[k] = arr1[num - k - 1];//反向复制需要-1,因为num下标最大为 num-1,arr下标应该是k,不是num
    }
    return arr;
}

int main()
{
    int arr1[10];
    // 随机生成一维数组
    srand((int)time(NULL));  // 产生随机种子
    for (int i = 0; i < 10; i++)
    {
        arr1[i] = rand() % 100;
    }
    for (int i = 0; i < 10; i++)
    {
        cout << arr1[i] << " ";
    }
    cout << endl;
    // 获得排序后的数组
    int* arrA;
    arrA = range(arr1, 10);
    for (int i = 0; i < 10; i++)
    {
        cout << arrA[i] << " ";
    }
    cout << endl;

    system("pause");
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-4-12 16:15:42 | 显示全部楼层    本楼为最佳答案   
# include <iostream>
# include <cstdlib>
# include <ctime>
using namespace std;

// 为了return数组,必须定义指针函数
int* range(int *arr,int num);


//冒泡排序找最大值,为了保证普适性,其数组长度应该为输入的数组长度相同
int* range(int *arr,int num)
{
    int* arr1 = new int[num];//数组动态分配

    for (int k = 0; k < num; k++)
    {
        arr1[k] = arr[k];
    }

    for (int i = 0; i < num - 1; i++)
    {
        for (int j = 0; j < num - i - 1; j++)
        {
            if (arr1[j] > arr1[j + 1]) //这里要打括号
            {
                int temp = arr1[j];
                arr1[j] = arr1[j + 1];
                arr1[j + 1] = temp;
            }
        }
    }

    // 反向复制一次,并返回

    for (int k = 0; k < num; k++)
    {
        arr[k] = arr1[num - k - 1];//反向复制需要-1,因为num下标最大为 num-1,arr下标应该是k,不是num
    }
    return arr;
}

int main()
{
    int arr1[10];
    // 随机生成一维数组
    srand((int)time(NULL));  // 产生随机种子
    for (int i = 0; i < 10; i++)
    {
        arr1[i] = rand() % 100;
    }
    for (int i = 0; i < 10; i++)
    {
        cout << arr1[i] << " ";
    }
    cout << endl;
    // 获得排序后的数组
    int* arrA;
    arrA = range(arr1, 10);
    for (int i = 0; i < 10; i++)
    {
        cout << arrA[i] << " ";
    }
    cout << endl;

    system("pause");
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-12 19:59:43 | 显示全部楼层
奇宝 发表于 2020-4-12 16:15
# include
# include
# include

感谢指导!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-15 06:45

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表