我想制作一个指针数组的冒泡排序函数,每个指针指向另一个数组 - 在函数内部,我收到的错误是我违反了写入位置(Visual Studio)
PS,我做(*parr)++
因为每个数组的第一个值显示没有第一个值的数组的长度所以我需要从第二个框开始冒泡排序(arr[1]
而不是{{ 1}}例如)。
有人可以写信给我,我该如何解决?
感谢帮助
(我需要对原始数组的值进行排序,而不是对数组的指针进行排序。)
arr[0]
答案 0 :(得分:1)
这似乎有效。 func1更容易使用解除引用作为parr [i] [k]而不是移动指针。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void func1(int** parr);
int main(void){
int j;
int arr0[4] = { 3, 9, 6, 7 };
int arr1[3] = { 2, 5, 5 };
int arr2[1] = { 0 };
int arr3[2] = { 1, 6 };
int arr4[5] = { 4, 5, 6, 2, 1 };
int* parr[5] = { arr0, arr1, arr2, arr3, arr4 };
func1(parr);
for (j = 1; j <= arr0[0]; j++)
{
printf ( "arr0[%d] %d\n", j, arr0[j]);
}
for (j = 1; j <= arr4[0]; j++)
{
printf ( "arr4[%d] %d\n", j, arr4[j]);
}
return (0);
}
void func1(int** parr)
{
int i;
int temp;
int j;
int k;
int length;
for (i = 0; i < 5; i++)
{
length = **parr;
for (j = 0; j < length; j++)
{
for (k = 1; k < length - j; k++)
{
temp = *((*parr)+k);
if (*((*parr)+k)>*((*parr)+k+1))
{
temp = *((*parr)+k);
*((*parr)+k) = *((*parr)+k+1);
*((*parr)+k+1) = temp;
}
}
}
*parr++;// next array
}
}