指针指向 C++ 中函数传递的字符串

Posted

技术标签:

【中文标题】指针指向 C++ 中函数传递的字符串【英文标题】:Pointer pointed to string passed by function in C++ 【发布时间】:2014-07-22 20:19:17 【问题描述】:

我对函数中字符串使用的指针有疑问。我的代码如下。

void printName(int *max,int *min,string *maxFirst, string *maxLast)

        ifstream infile;
        infile.open("input.txt");
        string firstName,lastName;
        float age;
        infile>>firstName>>lastName;
        while(firstName!="Term") 
        infile>>age;

    if(age==*max)
       
         maxFirst=&firstName;
         maxLast=&lastName;
         cout<<*maxFirst<<' '<<*maxLast<<endl;
       
    

要使用这个函数,在main()中,我将它定义为

int main()

 void printName(int *,int *,string *,string *);
 int *pMaxAge, *pMinAge;
 string *maxFirst,*maxLast;
 pMaxAge=&maxAge;
 pMinAge=&minAge;

 printName(pMaxAge,pMinAge,maxFirst,maxLast);
 cout<<"\nThe oldest employee is "<<*maxFirst<<' '<<
         *maxLast<<endl;

我跳过了部分代码。虽然第一个 cout 工作正常,但第二个不起作用。请问我的指针传递有什么问题吗?

谢谢。

【问题讨论】:

您的代码的重要部分似乎丢失了(特别是 maxAge、minAge、firstName 和 lastName 的定义) maxFirstmaxLast 应该是指向指针的指针。 您好,感谢您的回复。我的代码中有它们,但粘贴时会跳过它们。程序从另一个文件中读取名字和姓氏。 您好,谢谢。为什么 maxFirst 和 maxLast 应该是那些? 请不要跳过它们,它们的声明非常重要,尤其是它们声明的范围。 【参考方案1】:

你对指针的理解是一团糟。您应该从头开始使用 RTFM 指针。你在这里所做的一切都毫无意义。

首先你声明了 4 个指针,没有初始化为任何东西。然后将它们传递给一个函数,该函数接受指针参数按值,并期望更改指针的值会影响函数之外的任何内容。

您应该在主函数中分配这些变量,然后通过引用或地址传递它们,并在这样做时正确地分配给它们。

例如:

void printName(int *max,int *min,string *maxFirst, string *maxLast)

    ifstream infile;
    infile.open("input.txt");
    string firstName,lastName;
    float age;
    infile>>firstName;
    while(firstName!="Term") 
        infile>>lastName>>age;

        if(age==*max)
        
            *max = (int)age;
            *maxFirst=firstName;
            *maxLast=lastName;
            cout<<*maxFirst<<' '<<*maxLast<<endl;
        
        infile>>firstName;
    

int main()

    int MaxAge = 0, MinAge;
    string maxFirst,maxLast;

    printName(&MaxAge,&MinAge,&maxFirst,&maxLast);
    cout<<"\nThe oldest employee is "<<maxFirst<<' '<<
         maxLast<<endl;

【讨论】:

【参考方案2】:

在printName函数中需要赋值给指针的内容:

*maxFirst = firstName;
*maxLast = lastName;

您还需要将指向现有变量的指针作为函数参数传递:

string maxFirst;
string maxLast;
printName(pMaxAge, pMinAge, &maxFirst, &maxLast);

整数参数可能也是如此。

【讨论】:

感谢您的提示。在我的代码中,我的定义是 maxFirst=&firstName; maxLast=&姓氏;请问有错吗? @user3684119 我仍然无法从您的示例中发现 firstName / lastName 是如何声明/定义的。请在您的问题中提供MCVE! 嗨,我添加了我定义名字和姓氏的部分,谢谢。

以上是关于指针指向 C++ 中函数传递的字符串的主要内容,如果未能解决你的问题,请参考以下文章

C++成员函数指针指向全局函数指针

在 C++ 中将指向基类的指针传递给派生类的成员函数

Llvm C++ API 将指向函数的指针传递给另一个函数

传递指向在 C++ 中动态定义的内置类型的指针

如何使函数返回指向函数的指针? (C++)

从函数 C++ 正确传递指针