指针指向 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 的定义)maxFirst
和 maxLast
应该是指向指针的指针。
您好,感谢您的回复。我的代码中有它们,但粘贴时会跳过它们。程序从另一个文件中读取名字和姓氏。
您好,谢谢。为什么 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++ 中函数传递的字符串的主要内容,如果未能解决你的问题,请参考以下文章