我对函数中字符串使用的指针有疑问。我的代码如下。
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工作不正常。请问我的指针有问题吗?
感谢。
答案 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;
}