我想对每个指针指向另一个数组的指针数组进行冒泡排序功能-在函数内部,并且遇到一个我违反了写入位置的错误(Visual Studio)
PS,我做(*parr)++
是因为每个阵列示出了第一值的阵列的不具有第一值,所以我需要开始气泡从所述第二框分选(长度arr[1]
和不arr[0]
例如)。有人可以给我写信我该如何解决?感谢您的帮助(我需要对原始数组的值而不是数组的指针进行排序)。
int main(void){
int i = 0;
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);
system("PAUSE");
return (0);
}
void func1(int** parr)
{
int i;
int temp;
int j;
int k;
int length;
for (i = 0; i < 5; i++, (parr)++)
{
length = **parr;
(*parr)++;
for (j = 0; j < length-1; j++)
{
for (k = 0; k < length - j - 1; k++, (*parr)++)
{
if ((**parr)>(*(*parr + 1)))
{
temp = **(parr);
**(parr) = (*(*parr + 1));
(*(*parr + 1)) = temp;
}
}
}
}
}
这似乎有效。在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
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句