c - 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]
(实际上,每次我编译和测试我的函数时,第一个元素总是会发生变化,并给我我猜的随机值)
解决方案
问题在于 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;
}
}
您必须更改end
为end2
才能在到达中间时停止您还必须在调用 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);
推荐阅读
- google-chrome - 在 Inspect Element Network 选项卡中隐藏 API 响应
- javascript - 在 php 中即时构建 xPath 查询
- python - 如何根据熊猫中的特定列和时间值替换零?
- python - 如何从列名中获取字符串并在python中融合多个列?
- c# - 通过构造函数实例化派生类时,如何初始化基类的属性?
- reactjs - 如何删除outlook加载项对话框的地址栏和自定义地址栏
- ms-project - 打开 MS Project 时速度缓慢
- python - 我不了解在 fcluster 中工作的阈值的详细行为(方法 ='完成')
- html - 我不想错过烤肉串……每边不要两行,只有 20%
- android - Ui Recorder 在阿里巴巴/macaca 中不起作用