分配数组C ++

时间:2013-12-01 23:48:38

标签: c++ arrays pointers

我在分配新数组时遇到问题,这是我的旧功能,它完全可以买到现在我正在尝试将其更改为const

StudentType* SortStudentsByName(StudentType* student, int numStudents)
{
   int startScan,
   minIndex;

   for (startScan = 0; startScan < (numStudents-1); startScan++) 
   {
      minIndex = startScan;
      for ( int index = startScan; index < numStudents; index++) 
      {
         if( student[index].studentName < student[minIndex].studentName)
            minIndex = index;
      }

       if(minIndex!=startScan)
       {
           StudentType temp = student[minIndex]; 
           student[minIndex] = student[startScan];
           student[startScan] = temp;
       }
   }

   cout << endl;
   cout << "List of Students sorted Alphabetically "<< endl;
   DisplayAllStudents(student, numStudents);
   return student;
}

我认为这与我注释掉的三行有关,这是我的代码:

StudentType* SortStudentsByName(const StudentType* student, int numStudents)    
{
   StudentType* New_StudentType;

   //Allocate a new array
   New_StudentType = new StudentType[numStudents];

   int startScan,
   minIndex;

   for (startScan = 0; startScan < (numStudents); startScan++)
   {
       minIndex = startScan;
       for ( int index = startScan; index < numStudents; index++)
       {
          if( student[index].studentName < student[minIndex].studentName)
        minIndex = index;
       }

       New_StudentType = student[minIndex]; //error 1
       student[minIndex] = student[startScan];// error 2
       student[startScan] =  New_StudentType;// error 3
   }
   cout << endl;
   cout << "List of Students sorted Alphabetically "<< endl;
   DisplayAllStudents(student, numStudents);
   return New_StudentType; 
}

1 个答案:

答案 0 :(得分:0)

在你的新功能中你有这个论点:

const StudentType* student

在这种情况下,const可以在类型的任何一侧,因此这相当于

StudentType const* student

所以student是指向const StudentType的指针。接下来请注意,有两种方法可以声明一个const指针:一种方法可以阻止您更改指向的内容,另一种方法可以阻止您更改指向的DATA。

因此,在您的情况下,您可以更改指针值,但不能使用此指针更改数据。

继续,您列出的第一个错误是:

New_StudentType = student[minIndex]; //error 1

这是错误的,因为您尝试将student数据minIndex分配给指针New_StudentType,这些是不兼容的类型。

您标记的下一个错误是:

student[minIndex] = student[startScan];// error 2

如上所述,您可以更改指针值但不更改学生数据,您尝试使用此语句更改数据。

错误3有同样的问题:

student[startScan] =  New_StudentType;// error 3