Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;使用参数返回指针-不同指针类型之间的比较缺少强制转换_C++_Arrays_Pointers_Casting_Pass By Value - Fatal编程技术网

C++ C++;使用参数返回指针-不同指针类型之间的比较缺少强制转换

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 find(int id,Student**s)的函数,该函数使用参数id中指定的id在数组中搜索Student,并使用参数s返回该Student指针。任务要求我必须使用参数返回此数据,而不使用返回值

我对最后一行的意思有点困惑。到目前为止,我已经知道了这一点,但是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];
        }
    }
}
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
设置为de>nullptr表示不匹配。应将
*s
设置为
nullptr
表示不匹配。
int StudentsArray::find(int id){
    for(int i = 0; i < studentsCount; ++i){
        if(students[i]->getId() == id){ 
            return i;
        }
    }
    return -1;
}