C++中能否向任意函数传递数组?数组逆序排序异常求助
问题解答
一、数组逆序排序的错误修正
你的代码无法正确完成逆序的核心问题是直接用后续元素覆盖前面的元素:当循环执行到后半段时,原数组前半部分的原始数据已经被覆盖,导致无法拿到正确值完成逆序。比如当index=5、i=4时,a[4]已经被之前的a[9]覆盖,此时赋值的是修改后的值,而非原始数组的4。
另外,你的reverse函数声明为返回int,但函数内没有返回语句,这会触发未定义行为,应该改为void类型(因为不需要返回值)。
修正后的代码
#include <iostream> using namespace std; void reverse(int a[], int size); // 新增数组大小参数 int main() { int std[10] = {0,1,2,3,4,5,6,7,8,9}; reverse(std, 10); // 打印验证结果 cout << "逆序后的数组:"; for(int num : std) { cout << num << " "; } } void reverse(int a[], int size) { // 只遍历数组前半段,与后半段对称位置交换元素 for (int i = 0; i < size / 2; i++) { int temp = a[i]; a[i] = a[size - 1 - i]; a[size - 1 - i] = temp; } }
如果仅需要打印逆序结果、不需要修改原数组,也可以直接从后往前遍历打印:
void printReverse(int a[], int size) { cout << "逆序打印结果:"; for(int i = size - 1; i >= 0; i--) { cout << a[i] << " "; } }
二、C++中是否可以向任意函数传递数组?
可以传递,但要注意关键细节:C++中数组作为函数参数时,会被隐式转换为指向数组首元素的指针,函数无法直接获取数组的实际大小。因此需要额外传递数组长度参数,或者使用更安全的替代方案:
- 使用
std::array(C++11及以上):封装好的固定大小数组类型,传递时能保留大小信息,示例:void func(std::array<int,10>& arr)。 - 使用模板函数:通过模板参数推导数组大小,示例:
template <size_t N> void reverse(int (&a)[N]) { for(int i = 0; i < N/2; i++) { swap(a[i], a[N-1-i]); } } - 使用
std::vector:动态数组类型,本身携带大小信息,传递时更灵活。
内容的提问来源于stack exchange,提问作者Noor Muhammad
相关产品推荐
相关产品推荐

