C ++使用参数返回指针 - 不同指针类型之间的比较缺少强制转换
C++ returning pointer using parameter - comparison between distinct pointer types lack a cast
我正在尝试创建一个名为 void find(int id, Student** s) 的函数,该函数在数组中搜索具有参数 id 中指定的 id 的学生,以及 returns 学生指针使用参数 s。任务说我必须使用参数 return 此数据并且不使用 return 值。
我对最后一行的意思有点困惑。到目前为止我有这个但是 s == students[i] 行导致错误:不同指针类型“Student**”和“Student*”之间的比较缺少强制转换 [
void StudentsArray::find(int id, Student** s){
for(int i = 0; i < studentsCount; ++i){
if(students[i]->getId() == id){
s=students[i];
}
}
}
我对我应该做什么感到有点困惑 return 以及我将如何去做,非常感谢任何帮助!
函数中的第二个参数表示“指向 Student
的指针”
要return它,你需要将它设置为Student
的指针。
获取 student
数组之一的指针是这样完成的:&student[i]
.
一旦你有了指针,你需要存储在某个地方,你将通过像这样取消引用它来将它存储在给定的 pointer-to-pointer 中:*s
放在一起,你需要*s = &student[i]
执行:“在s
指向的内存区域存储student
项的地址”
void StudentsArray::find(int id, Student** s){
*s = nullptr;
for(int i = 0; i < studentsCount; ++i){
if(students[i]->getId() == id){
*s = &students[i];
}
}
}
如果一开始这令人不安,只需删除一个间接层:
void StudentsArray::find(int id, Student* & s) {
...
s = &student[i];
...
}
在这种情况下,您正在获取指向学生的指针的引用(因此,如果您在函数内部修改它,您就是从调用者的站点修改它)。当您分配它时,它就像是 returned 给调用者。
为什么重要
有时,您需要能够从一个函数中 return 多个 事物 。要么你构建一个包含 things 的结构,然后你 return 但是这样做非常痛苦而且通常效率不高,要么你只是接受一个指向(或引用)的指针(或引用)这些 things 并期望函数为您填充它们。根据我自己的经验,这是大多数时候所做的。
编辑:根据 Tanveer Badar 的评论,如果没有找到,最好期望函数将 returned 值设置为 0(或更好的 nullptr),这样您就不必在来电者的网站。
您可以 return 匹配发生的索引或 -1 如果 none 匹配。
int StudentsArray::find(int id){
for(int i = 0; i < studentsCount; ++i){
if(students[i]->getId() == id){
return i;
}
}
return -1;
}
我正在尝试创建一个名为 void find(int id, Student** s) 的函数,该函数在数组中搜索具有参数 id 中指定的 id 的学生,以及 returns 学生指针使用参数 s。任务说我必须使用参数 return 此数据并且不使用 return 值。
我对最后一行的意思有点困惑。到目前为止我有这个但是 s == students[i] 行导致错误:不同指针类型“Student**”和“Student*”之间的比较缺少强制转换 [
void StudentsArray::find(int id, Student** s){
for(int i = 0; i < studentsCount; ++i){
if(students[i]->getId() == id){
s=students[i];
}
}
}
我对我应该做什么感到有点困惑 return 以及我将如何去做,非常感谢任何帮助!
函数中的第二个参数表示“指向 Student
的指针”
要return它,你需要将它设置为Student
的指针。
获取 student
数组之一的指针是这样完成的:&student[i]
.
一旦你有了指针,你需要存储在某个地方,你将通过像这样取消引用它来将它存储在给定的 pointer-to-pointer 中:*s
放在一起,你需要*s = &student[i]
执行:“在s
指向的内存区域存储student
项的地址”
void StudentsArray::find(int id, Student** s){
*s = nullptr;
for(int i = 0; i < studentsCount; ++i){
if(students[i]->getId() == id){
*s = &students[i];
}
}
}
如果一开始这令人不安,只需删除一个间接层:
void StudentsArray::find(int id, Student* & s) {
...
s = &student[i];
...
}
在这种情况下,您正在获取指向学生的指针的引用(因此,如果您在函数内部修改它,您就是从调用者的站点修改它)。当您分配它时,它就像是 returned 给调用者。
为什么重要
有时,您需要能够从一个函数中 return 多个 事物 。要么你构建一个包含 things 的结构,然后你 return 但是这样做非常痛苦而且通常效率不高,要么你只是接受一个指向(或引用)的指针(或引用)这些 things 并期望函数为您填充它们。根据我自己的经验,这是大多数时候所做的。
编辑:根据 Tanveer Badar 的评论,如果没有找到,最好期望函数将 returned 值设置为 0(或更好的 nullptr),这样您就不必在来电者的网站。
您可以 return 匹配发生的索引或 -1 如果 none 匹配。
int StudentsArray::find(int id){
for(int i = 0; i < studentsCount; ++i){
if(students[i]->getId() == id){
return i;
}
}
return -1;
}