将动态分配的数组从函数传递到另一个函数

时间:2017-06-16 21:24:01

标签: c++

我是C ++的新手。我想制作从数组中创建所有可能单词的程序。问题是我不知道如何将数组的值从一个函数传递到另一个函数。

#include <iostream>
using namespace std; 

void insertArray(int sizeOfArray);
void outputArray(int sizeOfArray, char * aray);

int main(){
    insertArray(5);

    return 0;
}

void insertArray(int sizeOfArray){
    char value;
    char *arrayOfletters  = new char[sizeOfArray];
    for(int i = 0; i < sizeOfArray; i++){
        cout << "Input letter number: " << i+1 << endl;
        cin >> value;

        if(value >= 'a' && value <= 'z' || value >= 'A' && value <= 'Z')
            arrayOfletters[i] = value;
        else {
            cout << "Inputed value is wrong. Try again!" << endl;
            i--;
        }
    }
}

void outputArray(int sizeOfArray, char * array) {
    for(int i = 0; i < sizeOfArray; i++)
        cout << array[i];
} 

现在我想将insertArray函数的值传递给outputArray函数来检查它是如何工作的。

5 个答案:

答案 0 :(得分:2)

不要打扰旧式阵列。只需使用std::vector(或std::array)并像传递任何其他变量一样传递它。

如果insertArray刚刚返回了一个值向量,您可以在变量中捕获该值,然后将其传递给outputArray

auto val = inputArray(...);
outputArray(val);

答案 1 :(得分:1)

你可以采取两种方式

  1. 让insert函数返回一个数组。

    char* insertArray(int sizeOfArray){
        char value;
        char *arrayOfletters  = new char[sizeOfArray];
        for(int i = 0; i < sizeOfArray; i++){
            cout << "Input letter number: " << i+1 << endl;
            cin >> value;
    
            if(value >= 'a' && value <= 'z' || value >= 'A' && value <= 'Z')
                arrayOfletters[i] = value;
            else {
                cout << "Inputed value is wrong. Try again!" << endl;
                i--;
            }
        }
        return arrayOfletters;
    }
    
  2. 使用参数传递数组,因为它是一个指针,内容在数组内/外共享:

    void insertArray(int sizeOfArray, char*& arrayOfletters){
    char value;
    arrayOfletters  = new char[sizeOfArray];
    for(int i = 0; i < sizeOfArray; i++){
        cout << "Input letter number: " << i+1 << endl;
        cin >> value;
    
        if(value >= 'a' && value <= 'z' || value >= 'A' && value <= 'Z')
            arrayOfletters[i] = value;
        else {
            cout << "Inputed value is wrong. Try again!" << endl;
            i--;
        }
    }
    }
    
  3. 两者都应该有效

答案 2 :(得分:0)

我建议将分配并填充insertArray的数组作为返回值返回。请注意,您还必须释放insertArray中分配的内存。您可以按照以下方式调整您的计划:

char* insertArray(int sizeOfArray);
void outputArray(int sizeOfArray, char * aray);

int main(){
    char* array = insertArray(5);
    outputArray(5, array);
    delete[] array;
    return 0;
}

char* insertArray(int sizeOfArray){
    char value;
    char *arrayOfletters  = new char[sizeOfArray];
    ...
    return arrayOfLetters;
}

答案 3 :(得分:0)

您可以在insertArray函数中调用outputArray,如下所示:

void insertArray(int sizeOfArray){
    char value;
    char *arrayOfletters  = new char[sizeOfArray];
    for(int i = 0; i < sizeOfArray; i++){
        cout << "Input letter number: " << i+1 << endl;
        cin >> value;

        if(value >= 'a' && value <= 'z' || value >= 'A' && value <= 'Z')
            arrayOfletters[i] = value;
        else {
            cout << "Inputed value is wrong. Try again!" << endl;
            i--;
        }
    }

    outputArray(sizeOfArray, arrayOfletters);
    delete[] arrayOfletters;
}

或者,如果您希望能够从main执行这两个操作,则必须将指针返回到您在insertArray中分配的数组,以便可以从main使用它:

#include <iostream>
using namespace std; 

char *insertArray(int sizeOfArray);
void outputArray(int sizeOfArray, char * aray);

int main(){
    char *pArray = insertArray(5);
    outputArray(sizeOfArray, pArray);
    delete[] pArray;
    return 0;
}

char *insertArray(int sizeOfArray){
    char value;
    char *arrayOfletters  = new char[sizeOfArray];
    for(int i = 0; i < sizeOfArray; i++){
        cout << "Input letter number: " << i+1 << endl;
        cin >> value;

        if(value >= 'a' && value <= 'z' || value >= 'A' && value <= 'Z')
            arrayOfletters[i] = value;
        else {
            cout << "Inputed value is wrong. Try again!" << endl;
            i--;
        }
    }
    return arrayOfletters;
}

void outputArray(int sizeOfArray, char * array) {
    for(int i = 0; i < sizeOfArray; i++)
        cout << array[i];
}

答案 4 :(得分:0)

只需返回arrayOfLetters - 这是指向内存中的数组 - 返回到main,然后将其作为参数传递给下一个函数,如下所示:

char* myCharArray = insertArray(5); outputArray(5, myCharArray)

重要: 确保在函数或主函数中的某个地方调用delete[] myCharArray,否则将泄漏内存。