首页 > 解决方案 > C:使用指针的反向数组?

问题描述

我没有看到我在这段代码中出错的地方:

void swap(int* a, int* b)
{
int temp = *a;

*a = *b;
*b = temp;
}

void array_reverse(int *begin, int *end)
{
    int *end2 = end;
    int *q = 0;
    for (q = begin; q < end; q += 1)
    { 
        swap(q, end2); 
        end2 -= 1;
    }
}

它应该反转数组:

arr{ 1, 2, 3}

变成:

arr{ 3, 2, 1}

我的输出:

[ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10] 

变成:

[111009824,  2,  3,  4,  5,  6,  7,  8,  9, 10]

(实际上,每次我编译和测试我的函数时,第一个元素总是会发生变化,并给我我猜的随机值)

标签: carrayspointersreverse

解决方案


问题在于 for 循环

void array_reverse(int *begin, int *end)
{
    int *end2 = end;
    int *q = 0;
    for (q = begin; q < end; q += 1)
    { 
        swap(q, end2); 
        end2 -= 1;
    }
}

您必须更改endend2才能在到达中间时停止您还必须在调用 swap 之前减少 end2 以便指向正确的值

void array_reverse(int *begin, int *end)
{
    int *end2 = end;
    int *q = 0;
    for (q = begin; q < end2; q += 1)
    { 
        end2 -= 1;
        swap(q, end2); 

    }
}

然后函数调用看起来像这样

int test[10] = {1,2,3,4,5,6,7,8,9,10};
array_reverse(test, test + 10);

推荐阅读