【问题标题】:Pointer pointed to string passed by function in C++指针指向 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 应该是那些?
  • 请不要跳过它们,它们的声明非常重要,尤其是它们声明的范围。

标签: c++ string function pointers


【解决方案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
    • 嗨,我添加了我定义名字和姓氏的部分,谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-09
    • 1970-01-01
    • 1970-01-01
    • 2021-06-28
    • 2011-06-05
    • 1970-01-01
    • 2015-08-05
    相关资源
    最近更新 更多