Ошибка при вызове функции с использованием указателей в качестве параметра

Сообщение об ошибке:

main.cpp: In function 'int main()':
main.cpp:39:52: error: expression list treated as compound expression in initializer [-fpermissive]
int* concatArray (*pArray1, size1, *pArray2, size2);
^
main.cpp:39:52: error: invalid conversion from 'int' to 'int*' [-fpermissive]

В строке 39 моего кода я вызываю функцию concat; Я никогда не видел эту ошибку раньше, и я не знаю, как ее исправить.

#include <iostream>
#include <cstdlib>

using namespace std;

int* concatArray (int* pArray1, int size1, int* pArray2, int size2);

int main (){

int size1 = 8;
int Array1 [size1];
for (int i = 0; i < size1; i++){
Array1[i] = rand() % 10;
}

int size2 = 10;
int Array2 [size2];
for (int i = 0; i < size2; i++){
Array2[i] = rand() % 10;
}

int* pArray1;
int* pArray2;
pArray1 = Array1;
pArray2 = Array2;

cout << "The first array contains: " << endl;
for (int i = 0; i < size1; i++){
cout << Array1[i] << endl;
}

cout << "The second array contains: " << endl;
for (int i = 0; i < size2; i++){
cout << Array2[i] << endl;
}

int* concatArray (*pArray1, size1, *pArray2, size2);

cout << "the concat array contains: " << endl;
for (int i = 0; i < size1 + size2; i++) {
cout << (concatArray + i) << endl;
}
return 0;
}

int* concatArray (int* pArray1, int size1, int* pArray2, int size2){

int* concatArray = new int [size1 + size2];
for (int i = 0; i < size1 + size2; i++) {
if(i < size1){
*(concatArray + i) = *(pArray1 + i);
}
else{
*(concatArray + i) = *(pArray2 + i);
}
}
return concatArray;
}

0

Решение

int* concatArray (*pArray1, size1, *pArray2, size2);

Это запутывает синтаксис для объявление переменной а также вызов функции. Чтобы избежать путаницы, вы должны выбрать другое имя для переменной и инициализировать его в результате вызова функции.

Это должно исправить первую ошибку; вторая причина в том, что первый и третий аргументы должны быть указателями; но вы разыменовываете указатели, чтобы получить int ценности, на которые они указывают.

Так что это должно быть что-то вроде

int* concatenated = concatArray(pArray1, size1, pArray2, size2);

Будем надеяться, что вскоре вы поймете, почему плохая идея манипулировать такими указателями, как исправить утечку памяти в вашем коде и как использовать библиотечные средства для более легкого управления памятью. Но это скорее выходит за рамки вопроса.

3

Другие решения

Это выражение

int* concatArray (*pArray1, size1, *pArray2, size2);

является недействительным.

Фактически это выглядит как определение указателя на int с именем concatArray и с некоторыми аргументами.

Более того, если вы имели в виду вызов функции concatArray и если бы вы написали правильно

int *SomePointer = concatArray (*pArray1, size1, *pArray2, size2);

тем не менее, его каллусы также недействительны, потому что вместо указателей вы передаете в качестве аргументов объекты типа int: * pArray1 и * pArray2.

Примите во внимание, что размеры массивов должны быть константными выражениями в C ++. Итак, этот код

int size1 = 8;
int Array1 [size1];
//...
int size2 = 10;
int Array2 [size2];

не совместим с C ++.

Также этот цикл в функции

for (int i = 0; i < size1 + size2; i++) {
if(i < size1){
*(concatArray + i) = *(pArray1 + i);
}
else{
*(concatArray + i) = *(pArray2 + i);
}
}

является недействительным. Вместо

*(concatArray + i) = *(pArray2 + i);

там должен быть

*(concatArray + i) = *(pArray2 + i - size1);
0

По вопросам рекламы [email protected]