Casetrous 2022-06-10 00:21 采纳率: 100%
浏览 20
已结题

请问一下 斜杠掉的部分为什么有问题啊(语言-c++)

void maopao(int* p)
{
    //cout << *p<<*(++p);//为什么是反过来的????cout从右往左读取
    for (int i = 9; i >0; i--/*int i=0;i<9;i++*/)
    {
        for (int j = 0; j <i; j++/*int j=0;j<9-i;j++*/)
        {
            //int temp = 0;//想问一下 这一段为什么不行啊
            //if (*p > *(++p))
            //{
            //    temp = *(++p);
            //    *(++p) = *p;
            //    *p = temp;
            //}

            if (p[j] > p[j+1])
            {
                int temp = p[j];
                p[j] = p[j + 1];
                p[j + 1] = temp;
            }
        }
    }
}

int main()
{
    int arr[10] = { 4,3,6,9,1,2,10,8,7,5 };
    maopao(arr);
    for (int i = 0; i < 10; i++)
    {
        cout << arr[i];
    }
}

冒泡排序 把数组从小到大排序的程序 但指针的有点搞不懂
想请问一下 void maopao中间//斜杠掉的部分为什么不行啊 能不能解引用之后直接比较数值啊
还有个问题 传递到void maopao中的不是指针吗 为什么p[i]跟数组是一样的呀

  • 写回答

1条回答 默认 最新

  • WaitIKnowYou 2022-06-10 00:50
    关注

    你每执行一次++p 指针都会后移一位
    你的代码都不是需要交换的那两个数字了,
    你可以定义一个新的指针变量q存++p的地址,用作和p交换 ,当然,你需要注意,你执行++p之后,原来的p也会后移一位
    所以,你最好写成p+1与p交换
    综上所述,你把你代码中的++p写成p+1就好了
    数组名就是数组首地址,既然是地址就是指针类型,基础没学明白呀
    int a[10], *p=a; 那a[i]与p[i]有啥区别呢?
    a[i+1]不就是 *(p+1)嘛

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 6月18日
  • 已采纳回答 6月10日
  • 创建了问题 6月10日

悬赏问题

  • ¥20 怎么用dlib库的算法识别小麦病虫害
  • ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
  • ¥15 java写代码遇到问题,求帮助
  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?
  • ¥15 加热介质是液体,换热器壳侧导热系数和总的导热系数怎么算