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

时间:2014-07-22 20:19:17

标签: c++ string function pointers

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

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工作正常,但第二个cout工作不正常。请问我的指针有问题吗?

感谢。

2 个答案:

答案 0 :(得分:0)

在printName函数中,您需要分配指针的内容:

*maxFirst = firstName;
*maxLast = lastName;

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

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

同样可能适用于整数参数。

答案 1 :(得分:0)

你对指针的理解是一团糟。你应该从头开始对指针进行RTFM。你在这里做的一切都没有意义。

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

您应该在main函数中分配这些变量,然后通过引用或地址传递它们,并在执行此操作时正确分配它们。

例如:

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;
}