为何void类型insertion_sort函数无需指针即可排序数组?
问题解答:为什么无需显式传指针就能修改数组
你这里其实是被C++的语法糖迷惑了——你以为没传指针,但实际上数组作为函数参数时,已经自动转换成指针传递了,具体原因如下:
数组名的隐式转换
当你在main里调用insertion_sort(vetor);时,这里的vetor(数组名)会自动转换成指向数组第一个元素的指针,也就是等价于insertion_sort(&vetor[0]);,本质上传递的就是指针。函数参数的语法糖
你写的函数声明void insertion_sort(int vetor[TAM])是C++的语法糖,编译器会把它直接解析成void insertion_sort(int* vetor)。哪怕你把TAM换成别的数字,或者写成int vetor[],结果都是一样的——参数本质是指针,数组长度在这里没有实际作用。void类型不影响外部变量修改
你之前的误解是把void和“不能修改外部变量”绑定了,这是错误的。void只是表示函数不返回任何值,和是否能修改外部变量完全无关。只要函数拿到的是指针、引用或者全局变量,不管返回类型是什么,都能修改外部数据。
回到你的代码:insertion_sort函数里操作的vetor[j],本质是通过指针访问原数组的内存空间,所以修改的就是main里定义的那个vetor数组,自然能实现排序效果。
内容的提问来源于stack exchange,提问作者André Luiz
相关产品推荐
相关产品推荐

