如何解决C ++使用参数返回指针-不同指针类型之间的比较缺少强制转换
我正在尝试创建一个称为void find(int id,Student ** s)的函数,该函数在数组中搜索具有参数id中指定的id的学生,然后使用参数s返回该学生指针。任务说我必须使用参数来返回此数据,并且不要使用返回值。
我对最后一行的含义有些困惑。到目前为止,我已经知道了,但是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];
}
}
}
我对应该返回的内容以及如何去做并希望得到任何帮助感到困惑!
解决方法
函数中的第二个自变量为“指向Student
的指针的指针”
要返回它,您需要将其设置为指针Student
。
像这样student
来获取&student[i]
数组之一的指针。
一旦有了指针,就需要将其存储在某个地方,然后通过像这样对它进行解引用来将其存储在给定的指针对指针中:*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];
...
}
在这种情况下,您正在获取一个指向学生的指针的引用(因此,如果您在调用者的站点中对其进行了修改,则可以在函数中进行修改)。分配后,就好像已将其返回给呼叫者。
为什么很重要
有时候,您需要能够从一个函数返回多个 。要么构建一个包含事物的结构,然后返回该结构,但是这样做非常痛苦且通常效率不高,要么只接受指向这些事物的指针(或引用),并期望函数可以为您填充它们。根据我自己的经验,大多数时间都是这样做的。
编辑:在Tanveer Badar发言之后,最好的做法是期望该函数将返回值设置为0(或更好的nullptr)(如果找不到),因此您不必在调用者的网站上进行操作。
,您可以返回匹配发生的索引,如果没有匹配则返回-1。
#creating variable based off column value
value = eps.select('value').collect()[0]
#attempting to lit the variable to create an entire column of just this variables output
dfall = dfall.withColumn('test',lit(col(value)))
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。