从 C++ 中的函数返回数组地址问题

returning an array address from function in c++ issue

本文关键字:数组 组地址 问题 返回 函数 C++      更新时间:2023-10-16

我是编程新手,这段代码在行 => int *result = apply_all(array1,5,array2,3( 中给了我语法错误 这是错误:在"}"标记|
我正在尝试编写名为 apply_all 的函数,该函数需要 2 个整数数组及其大小,并动态分配一个新的整数数组,其大小是 2 个数组大小的乘积。 该函数应遍历第二个数组,并在数组 1 的每个元素上多个每个元素,并将乘积存储在新创建的数组中。该函数返回指向新分配的数组的指针。 我还编写了一个函数,该函数是print以显示1st,2nd和new数组。

#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;
}

在这一行:

*(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

这是一个演示。

由于您是新手,一个简单的解决方法是创建一个带有缓冲区空间的数组来存储您的结果,并将指针传递给apply_all。然后,您可以写入此数组(在 main 中声明(应该非常易于访问并导致很少的错误,并使用 c 字符串(如 end (知道结果何时结束并停止从数组打印(c 字符串以值 0 结尾,以便程序不会读取不相关的内存(。例如:

int buf[99];
apply_all(array_1, size1, array_2, size2, buf, size3);
for (int x = 0; buf[x] != end of buf var; x++;)
{
print(buf[x])
}

apply_all()
{
buf[start-end] = whatever you want;
buf[end + 1] = some variable that won't appear in buffer; //max int size?
}