C++ C++;使用参数返回指针-不同指针类型之间的比较缺少强制转换
我试图创建一个名为void find(int id,Student**s)的函数,该函数使用参数id中指定的id在数组中搜索Student,并使用参数s返回该Student指针。任务要求我必须使用参数返回此数据,而不使用返回值 我对最后一行的意思有点困惑。到目前为止,我已经知道了这一点,但是s==students[I]行导致了错误:不同指针类型“Student**”和“Student*”之间的比较缺少类型转换[C++ C++;使用参数返回指针-不同指针类型之间的比较缺少强制转换,c++,arrays,pointers,casting,pass-by-value,C++,Arrays,Pointers,Casting,Pass By Value,我试图创建一个名为void find(int id,Student**s)的函数,该函数使用参数id中指定的id在数组中搜索Student,并使用参数s返回该Student指针。任务要求我必须使用参数返回此数据,而不使用返回值 我对最后一行的意思有点困惑。到目前为止,我已经知道了这一点,但是s==students[I]行导致了错误:不同指针类型“Student**”和“Student*”之间的比较缺少类型转换[ void StudentsArray::find(int id, Student**
void StudentsArray::find(int id, Student** s){
for(int i = 0; i < studentsCount; ++i){
if(students[i]->getId() == id){
s=students[i];
}
}
}
void StudentsArray::find(int-id,Student**s){
for(int i=0;igetId()==id){
s=学生[i];
}
}
}
我只是对我应该返回什么以及如何返回感到有点困惑,并希望得到任何帮助!函数中的第二个参数是“指向
学生的指针的指针”
要返回它,您需要将它设置为Student
的指针。
获取学生
数组之一的指针如下:&student[i]
一旦你有了指针,你就需要把它存储在某个地方,然后你将它存储在给定的指向指针的指针中,就像这样取消引用:*s
总之,您需要*s=&student[i]
来执行:“在s
指向的内存区域中存储学生
项的地址”
在这种情况下,您将引用(因此,如果您在函数中修改它,您将从调用者的站点修改它)转换为指向student的指针。当您分配它时,它就像返回给调用者一样
为什么重要
有时,您需要能够从一个函数返回多个内容。或者您构建了一个包含这些内容的结构,然后返回这些内容,但这样做非常痛苦,而且通常效率不高,或者您只是接受一个指针(或一个引用)根据我自己的经验,这是大部分时间都在做的事情
编辑:根据Tanveer Badar的评论,如果找不到返回值,最好期望函数将返回值设置为0(或更好的为null ptr),这样您就不必在调用方的站点上执行此操作。函数中的第二个参数表示“指向
学生的指针的指针”
要返回它,您需要将它设置为Student
的指针。
获取学生
数组之一的指针如下:&student[i]
一旦你有了指针,你就需要把它存储在某个地方,然后你将它存储在给定的指向指针的指针中,就像这样取消引用:*s
总之,您需要*s=&student[i]
来执行:“在s
指向的内存区域中存储学生
项的地址”
在这种情况下,您将引用(因此,如果您在函数中修改它,您将从调用者的站点修改它)转换为指向student的指针。当您分配它时,它就像返回给调用者一样
为什么重要
有时,您需要能够从一个函数返回多个内容。或者您构建了一个包含这些内容的结构,然后返回这些内容,但这样做非常痛苦,而且通常效率不高,或者您只是接受一个指针(或一个引用)根据我自己的经验,这是大部分时间都在做的事情
编辑:根据Tanveer Badar的评论,最好的做法是,如果找不到函数,则期望函数将返回值设置为0(或更好的nullptr),这样您就不必在调用方的站点上执行此操作。您可以改为返回匹配发生的索引,或者如果不匹配,则返回-1
int StudentsArray::find(int id){
for(int i = 0; i < studentsCount; ++i){
if(students[i]->getId() == id){
return i;
}
}
return -1;
}
int StudentsArray::find(int-id){
for(int i=0;igetId()==id){
返回i;
}
}
返回-1;
}
您可以返回匹配发生的索引,如果没有匹配,则返回-1
int StudentsArray::find(int id){
for(int i = 0; i < studentsCount; ++i){
if(students[i]->getId() == id){
return i;
}
}
return -1;
}
int StudentsArray::find(int-id){
for(int i=0;igetId()==id){
返回i;
}
}
返回-1;
}
s==students[i]
--=
对等式进行比较,而不是赋值。此外,您将其标记为“按引用传递”,但这不是您展示给我们的代码中的情况。指针不是引用,而是值,因此您拥有的是传递值。即使您适应了上述更改,您的方法也无法指示不匹配。您应该在循环外将*s
设置为nullptr
。s==students[i]
--
==对等式进行比较,而不是赋值。此外,您将其标记为“按引用传递”,但这不是您展示给我们的代码中的情况。指针不是引用,而是值,因此您拥有的是传递值。即使您适应了上述更改,您的方法也无法指示不匹配。您应该在循环外部将*s
设置为nullptr
。它应该将*s
设置为*s
设置为nullptr
表示不匹配。
int StudentsArray::find(int id){
for(int i = 0; i < studentsCount; ++i){
if(students[i]->getId() == id){
return i;
}
}
return -1;
}