您好,我编写了一个函数,该函数从用户那里收到一组评分,它应该询问用户新的数组大小,这将增加数组并允许用户添加器官或减少数组并删除器官。但是相反,它仅在本地更改数组并打印。我怎样才能让她返回阵列并取消不必要的打印?谢谢!功能:
void changeNumber(int *grades, int size)
{
int newSize = 0;
int* newGrades = 0;
int i = 0;
printf("Enter new number of grades: ");
scanf_s("%d", &newSize);
if (newSize > size)
{
grades = (int*)realloc(grades, newSize * sizeof(int));
for (i = size; i <= (newSize-1); i++)
{
printf("Enter grade %d: ", i+1);
scanf_s("%d", grades+i);
grades[i] = checkNumber(grades[i]);
}
for (i = 0; i < newSize; i++)
{
printf("%d ", grades[i]);
}
}
else if (newSize < size)
{
newGrades = (int*)malloc(newSize * sizeof(int));
for (i = 0; i < (newSize-1); i++)
{
grades[i] = grades[i];
}
for (i = 0; i < newSize; i++)
{
printf("%d ", grades[i]);
}
}
free(newGrades);
如果函数返回类型为void,则必须通过引用将指针传递给函数
void changeNumber(int **grades, int size);
否则该函数将处理原始参数的副本,并且副本的更改不会影响原始参数。
但是当函数设置新的数组大小时,函数的用户应该知道什么是数组的新大小。因此,例如,您应该从函数中返回数组的新大小。
int changeNumber(int **grades, int size);
此外,如果新分配的数组的大小小于当前大小,则无需将元素复制到其自身
newGrades = (int*)malloc(newSize * sizeof(int));
for (i = 0; i < (newSize-1); i++)
{
grades[i] = grades[i];
}
并且您必须将新指针分配给指向数组第一个元素的旧指针。
代替用于数组大小的int类型,最好使用无符号整数类型size_t
。
该函数可以通过以下方式查看
size_t changeNumber( int **grades, size_t size )
{
size_t newSize = 0;
printf( "Enter new number of grades: " );
if ( scanf( "%zu", &newSize ) == 1 && size != newSize )
{
int *newGrades = realloc( *grades, newSize * sizeof( int ) );
if ( newGrades != NULL )
{
if ( size < newSize )
{
for ( size_t i = size; i < newSize; i++ )
{
printf( "Enter grade %zu: ", i + 1 );
scanf("%d", newGrades + i );
newGrades[i] = checkNumber( newGrades[i] );
}
}
size = newSize;
*grades = newGrades;
}
}
for ( size_t i = 0; i < size; i++ )
{
printf( "%d ", ( *grades )[i] );
}
putchar( '\n' );
return size;
}