这是我的函数代码,它将对作为指针传入的数组进行排序:
#include <stdlib.h>
#include <stdio.h>
void sortArray(int * numbers, unsigned int n, unsigned int descendFlag);
int main(int argc, char ** argv) {
int numArray[4] = {14, 4, 16, 12};
int * arrayPtr = numArray;
int x;
for (x = 0; x < 4; x++) {
printf("%i\n", numArray[x]);
}
printf("\n\n\n");
sortArray(arrayPtr, 4, 1);
for (x = 0; x < 4; x++) {
printf("%i\n\n", numArray[x]);
}
printf("\n\n\n");
sortArray(arrayPtr, 4, 0);
for (x = 0; x < 4; x++) {
printf("%i\n\n", numArray[x]);
}
return 0;
}
void sortArray(int * numbers, unsigned int n, unsigned int descendFlag) {
int i, j;
for (i = 0; i < n; i++) {
for (j = i + 1; j < n; j++) {
// Ascending
if (descendFlag != 1 && numbers[i] > numbers[j]) {
int temp = numbers[i];
numbers[i + 1] = numbers[i];
numbers[i] = temp;
}
if (descendFlag == 1 && numbers[i] < numbers[j]) {
int temp = numbers[i];
numbers[i + 1] = numbers[i];
numbers[i] = temp;
}
}
}
}
这是该计划的输出:
14
4
16
12
14
14
14
12
14
14
14
14
这里出了什么问题?我也正确使用指针吗?
我是C的新生,指针太混乱了。我不知道我是否应该使用&
或*
来访问作为指针传递的变量。我做错了什么?
答案 0 :(得分:3)
您正在j
和if (descendFlag == 1 && numbers[i] < numbers[j])
之间进行比较
i
然后与i + 1
和int temp = numbers[i];
numbers[i + 1] = numbers[i];
numbers[i] = temp;
进行交换..
int temp = numbers[i];
numbers[i] = numbers[j];
numbers[j] = temp;
交换您比较的位置元素
descendFlag != 1
其他比较和交换(int * arrayPtr = numArray;
)
您不需要此变量
numArray
sortArray(numArray, 4, 0);
可以像这样直接使用
{{1}}
由于数组的名称是该数组的基址。