我編寫了一個對數組值進行排序的程序。它有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;
}
}
}
我認爲它崩潰? – StoryTeller
@StoryTeller不,它只是迭代由每個數組的第一個索引組成的假數組(3,2,0,1,4)。 – Ma250
也許對*運算符優先級*的評論會有所幫助? '* arr [i]' - >'(* arr)[i]'? –