You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何void类型insertion_sort函数无需指针即可排序数组?

问题解答:为什么无需显式传指针就能修改数组

你这里其实是被C++的语法糖迷惑了——你以为没传指针,但实际上数组作为函数参数时,已经自动转换成指针传递了,具体原因如下:

  1. 数组名的隐式转换
    当你在main里调用insertion_sort(vetor);时,这里的vetor(数组名)会自动转换成指向数组第一个元素的指针,也就是等价于insertion_sort(&vetor[0]);,本质上传递的就是指针。

  2. 函数参数的语法糖
    你写的函数声明void insertion_sort(int vetor[TAM])是C++的语法糖,编译器会把它直接解析成void insertion_sort(int* vetor)。哪怕你把TAM换成别的数字,或者写成int vetor[],结果都是一样的——参数本质是指针,数组长度在这里没有实际作用。

  3. void类型不影响外部变量修改
    你之前的误解是把void和“不能修改外部变量”绑定了,这是错误的。void只是表示函数不返回任何值,和是否能修改外部变量完全无关。只要函数拿到的是指针、引用或者全局变量,不管返回类型是什么,都能修改外部数据。

回到你的代码:insertion_sort函数里操作的vetor[j],本质是通过指针访问原数组的内存空间,所以修改的就是main里定义的那个vetor数组,自然能实现排序效果。


内容的提问来源于stack exchange,提问作者André Luiz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 07:55:07