。这就是为什么使用RAII对象避免了此类问题(如 STD:UngQuyPPTR , vector < /COD>或 STD::String )哦,同意在C++中有更好的方法来做这件事,我尽量尽可能地坚持现有代码。,c++,C++" /> 。这就是为什么使用RAII对象避免了此类问题(如 STD:UngQuyPPTR , vector < /COD>或 STD::String )哦,同意在C++中有更好的方法来做这件事,我尽量尽可能地坚持现有代码。,c++,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]; } #包括 使用名称空间std; void insertArray(int-sizeOfArray); 无效输出阵列(int-sizeOfArray,char*aray); int main(){ 插页(5); 返回0; } void insertArray(int-sizeOfArray){ 字符值; char*arrayofleters=新字符[sizeOfArray]; 对于(int i=0;i。C++中的任何函数都允许返回值。我对函数类型旁边的*符号感到惊讶。BTW.谢谢VE!你忘了调用删除[]/Cord>。这就是为什么使用RAII对象避免了此类问题(如 STD:UngQuyPPTR , vector < /COD>或 STD::String )哦,同意在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]; } #包括 使用名称空间std; void insertArray(int-sizeOfArray); 无效输出阵列(int-sizeOfArray,char*aray); int main(){ 插页(5); 返回0; } void insertArray(int-sizeOfArray){ 字符值; char*arrayofleters=新字符[sizeOfArray]; 对于(int i=0;i。C++中的任何函数都允许返回值。我对函数类型旁边的*符号感到惊讶。BTW.谢谢VE!你忘了调用删除[]/Cord>。这就是为什么使用RAII对象避免了此类问题(如 STD:UngQuyPPTR , vector < /COD>或 STD::String )哦,同意在C++中有更好的方法来做这件事,我尽量尽可能地坚持现有代码。,c++,C++,不要使用旧式数组。只需使用std::vector(或std::array)并像传递任何其他变量一样传递它 如果insertArray刚刚返回了一个值向量,您可以在变量中捕获它,然后将其传递给outputArray auto val = inputArray(...); outputArray(val); 有两种方法可以做到 让insert函数返回一个数组 char* insertArray(int sizeOfArray){ char value; char *arrayOfl

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

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

auto val = inputArray(...);
outputArray(val);
有两种方法可以做到

  • 让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;
    }
    
    char*insertArray(int-sizeOfArray){
    字符值;
    char*arrayofleters=新字符[sizeOfArray];
    对于(int i=0;icout='a'&&value='a'&&value我建议将分配并填入
    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;
    }
    
    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;
    }
    

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

    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;
    }
    
    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;
    }
    
    void insertArray(int-sizeOfArray){
    字符值;
    char*arrayofleters=新字符[sizeOfArray];
    对于(int i=0;icout='a'&&value='a'&&value只需返回
    arrayOfLetters
    ——它指向内存中的数组——返回到main,然后将其作为参数传递给下一个函数,如下所示:

    char*myCharArray=insertArray(5);
    输出阵列(5,myCharArray)

    重要:
    请确保在函数或主函数中调用某个函数“<代码>删除”[/MyCAR] >或者将泄漏内存。

    你尝试了什么?为什么没有工作?在C++中,你应该使用<代码> STD::vector < /代码>。这应该是一个注释——它不回答OP的问题。“不要打扰旧的C样式数组”。,为什么是旧的?在C语言中,这不是旧的。如果这是为了学习的目的,了解std::vector背后的支持很重要。@Stargateur“旧”如“有更新更好的替代品可用(
    std::array
    std::vector
    )这是C++的,不是C.J.JePujl非常基于意见的……而且这是C++的一部分。所以你的句子应该是“不要去打扰老C++样式数组”。“。感谢您理解我的观点。第二个不起作用,因为您必须将指针传递给指针。请注意,您将覆盖
    char*arrayOfletters
    并分配
    新字符[…]我们可以通过引用来传递它。正确的,我们可以通过第一个解决方案的名字来命名。我想多读一点。“KoRADODO我认为它没有比名字更吸引人的名字。返回一个对象< /代码>。C++中的任何函数都允许返回值。我对函数类型旁边的*符号感到惊讶。BTW.谢谢VE!你忘了调用<代码>删除[]/Cord>。这就是为什么使用RAII对象避免了此类问题(如<代码> STD:UngQuyPPTR <代码>,<代码> vector < /COD>或<代码> STD::String )哦,同意在C++中有更好的方法来做这件事,我尽量尽可能地坚持现有代码。