c++ - 从 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;
}
解决方案
在这条线上:
*(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
需要去直到size1
,j
需要去size2
。
这是一个演示。
推荐阅读
- mongodb - 聚合:MongoDB聚合查询示例
- c - 检查用户输入是否在 1 到 10 之间
- ionic-framework - firebaseDynamicLinks onDynamicLink 不调用 ionic
- odoo - 如何根据其他形式odoo的布尔字段更改布尔字段值?
- php - 在 laravel 的另一个页面中扩展 $session
- cypress - 无法读取未定义的属性“点击”-赛普拉斯
- django - 如何在 Django 中实现注销测试用例?
- java - 为故障安全的 Maven 插件禁用 TestNG,仅保留用于万无一失
- python-3.x - 执行 python 编译脚本时出现错误'GLIBC_2.29 not found'
- ruby-on-rails - 从 jdbc 获取到 elasticsearch 的数据的有用查询