瞬晞朝露 2021-11-22 20:44 采纳率: 55.6%
浏览 18
已结题

这个代码为什么不能反序输出数组?

#include
using namespace std;
void inverse(int *p, int n)
{
int t,*d;
while(p<d)
{
d=p+9;
t=*p;
*p=*d;
*d=t;
p++;
d--;
}
}
int main()
{
int n=10,i,c=0;
int a[n];
for(c=0;c<n;c++)
cin>>a[c];
inverse(a,10);
cout<<"逆序排列的数据为:\n";
for(i=0;i<n;i++)
cout<<a[i]<<" ";
cout<<endl;
}

  • 写回答

1条回答 默认 最新

  • fortunely2 2021-11-23 10:49
    关注

    不要还没学会走,就想飞。你的inverse函数代码前几行就错了,而且使用了指针没有任何防护(空指针及数据溢出检查)。while(p<d) p没有做空指针检查,d没有初始化。后面不看了。

    对于数组,能用下标指示器(索引),就尽量不要用指针。首尾2个指示器,交换数组元素不好吗?

    void inverse(int a[], int n)
    {
        if (n < 0) return;
    
        for (int i = 0, j = n - 1; i < j; ++i, --j) {
            // swap a[i] and a[j]
            int t = a[i];
            a[i] = a[j];
            a[j] = t;
        }
    }
    int main()
    {
        int n = 10;
        int *a = new int[n]();
        // 输入数据到数组a
        // ...
        inverse(a, n); // 翻转数组a
        // 输出逆序后数组a
        // ...
    
        delete a;
        return 0;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 12月27日
  • 已采纳回答 12月19日
  • 创建了问题 11月22日

悬赏问题

  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同
  • ¥50 如何openEuler 22.03上安装配置drbd
  • ¥20 ING91680C BLE5.3 芯片怎么实现串口收发数据
  • ¥15 无线连接树莓派,无法执行update,如何解决?(相关搜索:软件下载)
  • ¥15 Windows11, backspace, enter, space键失灵