了解双指针的问题并将其传递给函数

Understanding issues with double pointers and passing them to functions

本文关键字:函数 指针 问题 了解      更新时间:2023-10-16

我是一个c++初学者,对下面的代码有一个理解问题。

#include <iostream>
using namespace std;
struct  student {
    string name;
    int age;
    float marks;
};
struct student *initiateStudent(string , int , float );
struct student *highestScorer(student **, int);
int main ( ) {
int totalStudents = 1;
string name;
int age;
float marks;
cin >> totalStudents;
student *stud[totalStudents];
for( int i = 0; i < totalStudents; i++ )  {
cin >> name >> age >> marks;
stud[i] = initiateStudent(name,age,marks);
}

student *topper = highestScorer(stud,totalStudents);

cout << topper->name << " is the topper with " << topper->marks << " marks" << endl;
for (int i = 0; i < totalStudents; ++i)
{
   delete stud[i];
}
return 0;
}
struct student *initiateStudent(string name, int age, float marks)
{
   student *temp_student;
   temp_student = new student;
   temp_student->name  = name;
   temp_student->age   = age;
   temp_student->marks = marks;
   return temp_student;
}

struct student *highestScorer( student **stud, int totalStudents)
{
   student *temp_student;
   temp_student = new student;
   temp_student = stud[0];
   for (int i = 1; i < totalStudents; ++i)
   {
      if (stud[i]->marks > temp_student->marks)
      {
         temp_student = stud[i];
      }
   }
   return temp_student;
}

代码工作得很好,但我不明白为什么我需要声明函数struct student *highestScorer(student **, int);与**,即一个双指针,当传递指针只是用一个初始化。

我会用一个*声明函数,因为这是我要传递的变量类型?

因为main中的stud变量是一个包含student指针的数组。当你通过参数传递一个数组时,你需要一个指向第一个元素的指针,无论这些元素是什么。因为数组是指针数组,所以有一个指向指针的指针。