首页 > 解决方案 > 从 C++ 问题中的函数返回数组地址

问题描述

我是编程新手,这段代码给了我行中的语法错误=> int *result = apply_all(array1,5,array2,3) 这是错误:在'}'标记之前的预期主表达式|
我正在尝试编写名为 apply_all 的函数,它需要 2 个整数数组及其大小,并动态分配一个新的整数数组,其大小是 2 个数组大小的乘积。该函数应遍历第二个数组,并在数组 1 的每个元素中多个每个元素,并将产品存储在新创建的数组中。该函数返回指向新分配数组的指针。我还写了一个打印函数来显示第一个、第二个和新数组。

#include <iostream>

using namespace std;
//function prototype
int *apply_all(int *array1 ,int size1,int *array2,int size2);
void print(int *array,int size);



int main()
{
    int array1[] {1,2,3,4,5};
    int array2[] {10,20,30};

    cout << "Array 1:";
    print(array1,5);

    cout << "Array 2:";
    print(array2,3);

    int *result = apply_all(array1,5,array2,3);             
    cout << "Result : ";
    print(result,15);
    delete [] result;
    return 0;
}


int *apply_all(int *array1 ,int size1,int *array2,int size2)
{
        int *result {nullptr};
        result = new int[size1 * size2];   
        for (int i{0};i<size2;i++)          
            for(int j{0};j<size1;j++)          
                  *(result[i*5+j]) = *(array1[i])**(array2[j]);           
        return result;
}


void print(int *array,int size)
{
    for(auto num:array)
        cout << num << endl;
}

标签: c++

解决方案


在这条线上:

*(result[i*5+j]) = *(array1[i])**(array2[j]);

因为result[i*5+j]给了你一个int,你试图取消引用一个int,这是不可能的。

你只需要这样做:

result[i*5+j] = array1[i] * array2[j];

此外,在 中print,您的 range-for 循环不适用于指针。你需要做:

for(int i = 0; i < size; ++i)
    cout << array[i] << endl;

此外,在 中apply_all,您的循环边界不正确。i需要去直到size1j需要去size2

这是一个演示


推荐阅读