gpt4 book ai didi

c++ - 交换数组指针

转载 作者:行者123 更新时间:2023-11-28 00:32:49 31 4
gpt4 key购买 nike

    #include <iostream>
#include <cstdlib>

using namespace std;

void swapNum(int *q, int *p)
{
int temp;
temp = *q;
*q = *p;
*p = temp;
}

void reverse(int *ip, int const size)
{
for (int k = 0; k < size; k++)
{
if (k == (size/2))
{
int *q = &ip[k];
int *p = &ip[k+1];
swapNum(q,p);
break;
}
else
swap(ip[k], ip[size-k]);
}
}

int main()
{
const int size = 20;
int arr[size];
int *ip;
ip = arr;

cout << "Please enter 20 different numbers." << endl;

for (int i = 0; i < size; i++)
{
cout << "\nNumber " << i+1 << " = ";
cin >> ip[i];
}

reverse(ip, size);

cout << "I will now print out the numbers in reverse order." << endl;

for (int j = 0; j < size; j++)
{
cout << ip[j] << " ";
}

return 0;
}

当我尝试运行这个程序时它崩溃了。我不知道出了什么问题,我的程序的目的是使用指针交换数组的数量。我最近被介绍到这个所以我不太熟悉它。但我认为我是在交换数字的地址,而不是交换地址中的数字。如果我错了,请纠正我。

最佳答案

您正在访问 reverse() 中的数组范围之外当你这样做时:

swap(ip[k], ip[size-k]);

for 的第一次迭代中循环,k0size-ksize .但是数组索引从 0 运行至 size-1 .所以应该是:

swap(ip[k], ip[size-k-1]);

但我没有看到 swap 的定义在你的程序中。我认为它实际上应该是:

swapNum(&ip[k], &ip[size-k-1]);

另一项改进:不再处理 size == k/2特别使用break , 只需使用 size < k/2作为 for 中的绑定(bind)测试循环。

关于c++ - 交换数组指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22156656/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com