我编写了一个程序来对数组的值进行排序。它有 5 个数组,
int arr1[] = { 3, 9, 6, 7 };
int arr2[] = { 2, 5, 5 };
int arr3[] = { 0 };
int arr4[] = { 1, 6 };
int arr5[] = { 4, 5, 6, 2, 1 };
和一个包含这 5 个数组的指针数组,
int* pArr[LEN] = { arr1, arr2, arr3, arr4, arr5 };
我想对每个数组的值进行排序,但是当我将数组传递给排序函数时
sortArrValues(&pArr[i]);
它将每个数组的第一个索引 (arr1
,arr2
...) 视为该数组的元素 (pArr[i]
), 所以 pArr[i]
是 (3,2,0,1,4)。
但我希望 pArr[i]
成为它本应成为的完整数组,所以在第一次迭代中 pArr[i]
将是 (3,9,6,7 ).
注意:每个数组的第一个索引表示该数组的长度(不包括该索引)。
排序将跳过第一个索引。
还有两个额外的功能,它们没有被使用(你可以跳过它们)。
完整代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define LEN 5
void sortArrValues(int** arr);
void sortArrAdress(int* pArr);
void printArr(int * pArr);
int main()
{
int arr1[] = { 3, 9, 6, 7 };
int arr2[] = { 2, 5, 5 };
int arr3[] = { 0 };
int arr4[] = { 1, 6 };
int arr5[] = { 4, 5, 6, 2, 1 };
int* pArr[LEN] = { arr1, arr2, arr3, arr4, arr5 };
int i = 0;
for (i = 0; i < LEN; i++)
{
sortArrValues(&pArr[i]);
}
//sortArrAdress(pArr);
//printArr(pArr);
return 0;
}
/*
this function will sort the given arrays' values.
in: array
out: none
*/
void sortArrValues(int** arr)
{
int tmp = 0;
int i = 0;
for (i = 1; i < *arr; i++)
{
if (*arr[i] > *arr[i+1])
{
tmp = *arr[i];
*arr[i] = *arr[i + 1];
*arr[i + 1] = tmp;
}
}
}
最佳答案
您的代码中存在一些错误。
首先,您不需要发送 &pArr[i]
,pArr[i]
足以订购您的阵列。然后你的 void sortArrValues(int** arr)
变成 void sortArrValues(int* arr)
更清晰易读。
其次,在你的 sortValues 中,当你更改一个值时,你应该重新启动(我知道这不是很优化,但如果你想让事情变得更快,你应该使用快速排序。使用你的代码,{ 4, 5, 6, 2, 1 }
将变成 { 4 5 2 1 6 }
。
这就是你的修复代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define LEN 5
void sortArrValues(int* arr);
void sortArrAdress(int* pArr);
void printArr(int * pArr);
int main()
{
int arr1[] = { 3, 9, 6, 7 };
int arr2[] = { 2, 5, 5 };
int arr3[] = { 0 };
int arr4[] = { 1, 6 };
int arr5[] = { 4, 5, 6, 2, 1 };
int* pArr[LEN] = { arr1, arr2, arr3, arr4, arr5 };
int i = 0;
for (i = 0; i < LEN; i++)
{
sortArrValues(pArr[i]);
}
//sortArrAdress(pArr);
//printArr(pArr);
for (int i = 0 ; i < LEN ; i++) {
for (int j = 0 ; j < pArr[i][0] + 1 ; j++)
printf("%d ", pArr[i][j]);
printf("\n");
}
return 0;
}
/*
this function will sort the given arrays' values.
in: array
out: none
*/
void sortArrValues(int* arr)
{
int tmp = 0;
int i = 0;
for (i = 1; i < *arr; i++)
{
if (arr[i] > arr[i+1])
{
tmp = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = tmp;
i = 0;
}
}
}
关于c - 如何在指针数组中传递完整数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43149156/