我正在编写一个程序,该程序创建一个从1到100的随机数数组,并按升序对其进行排序。下面是执行此操作的工作代码,但我需要对其进行修改,以便“交换”功能可以使用指针。 swap函数的调用应如下所示:swap(???,???),其中两个输入是指针。最好的方法是什么?
#include<stdio.h>
#include<math.h>
int main()
{
void fillArray(int sizeArray, int array[sizeArray]);
void printArray(int sizeArray, int array[sizeArray]);
void sortArray(int sizeArray, int array[sizeArray]);
int sizeArray;
printf("\nSize of the array? ");
scanf("%d", &sizeArray);
int array[sizeArray];
fillArray(sizeArray,array);
sortArray(sizeArray, array);
printArray(sizeArray, array);
}
void fillArray(int sizeArray, int array[sizeArray])
{
int increment;
for(increment=0; increment<sizeArray; increment++)
{
array[increment]=rand()%101;
}
}
void sortArray(int sizeArray, int array[sizeArray])
{
void swap(int increment2, int increment, int array[]);
int increment, increment2, temp;
for (increment=0; increment < sizeArray ; increment++)
{
for (increment2=increment+1; increment2 < sizeArray; increment2++)
{
swap(increment2, increment, array);
}
}
}
void swap(int increment2, int increment, int array[])
{
int temp;
if (array[increment2] < array[increment])
{
temp=array[increment];
array[increment]=array[increment2];
array[increment2]=temp;
}
}
void printArray(int sizeArray, int array[sizeArray])
{
int increment=0;
printf("\nHere's the sorted array:\n");
while(increment<21)
{
printf("\n array[%d] is %d", increment, array[increment]);
increment++;
}
}
输出应如下所示: output
答案 0 :(得分:0)
如下定义您的swap
函数:
void swap(int *increment2, int* increment)
在调用交换函数的地方修改for循环:
for (increment=0; increment < sizeArray ; increment++)
{
for (increment2=increment+1; increment2 < sizeArray; increment2++)
{
swap(array[increment2], array[increment]);
}
}
然后,修改交换功能:
void swap(int *increment2, int* increment)
{
int temp;
if (increment2 < increment)
{
temp= *increment2;
*increment2=*increment;
*increment2=temp;
}
}
答案 1 :(得分:0)
您需要修复函数调用,使参数与指针保持一致。
void swap(int *increment2, int* increment)
然后在交换功能中需要
您需要引用整数*。
Example
int n1;
int* x = 100
n1 = *x;
您可能需要 尊重未来的例子
您的函数接受指针
void swap(int *increment2, int* increment)
如果要引用整数或其他数据类型,请引用其地址,可以执行&进行引用。
int i = 5;
int* x;
x = &i;
x现在是指向i地址的整数指针。
答案 2 :(得分:0)
您的调用代码需要传递整数的地址以进行比较和交换。下列任何一种形式都是可以接受的,并且它们是等效的。
swap(array+increment2, array+increment);
swap(&array[increment2], &array[increment]);
第一种形式采用第一个元素(array
)的地址,并添加索引(increment2
)以获取正确元素的地址。
第二个版本也许更直接。它使用&
地址操作符来获取array[increment2]
的地址,该地址是所需的整数。
您的swap
函数需要定义如下:
void swap(int** p2, int** p1)
{
int temp;
if (*p2 < *p1)
{
temp=*p1;
*p1=*p2;
*p2=temp;
}
}
请注意如何使用*
运算符对指针进行取消引用以获取用于比较的整数值(并将其存储在temp
中)。