咨询:C++菜单函数中数组变量的跨函数传递问题
解决C++控制台菜单中数组变量传递的问题
嘿,我看你遇到了C++里局部变量作用域导致的参数访问问题——conjuntos()里定义的数组和长度变量,其他操作函数根本拿不到对吧?其实核心就是把这些局部变量通过函数参数传递给需要它们的函数,我给你一步步调整代码:
1. 修改菜单里的函数调用
在conjuntos()的switch分支里,调用各个操作函数时,把arr1、cant1、arr2、cant2作为参数传进去,比如:
switch( opc ){ case 1: unido(arr1, cant1, arr2, cant2); break; case 2: interconjunto(arr1, cant1, arr2, cant2); break; case 3: diferencia(arr1, cant1, arr2, cant2); break; case 4: simetrica(arr1, cant1, arr2, cant2); break; case 5: pertenece(arr1, cant1, arr2, cant2); break; case 6: contenido(arr1, cant1, arr2, cant2); break; };
2. 调整操作函数的定义(以unido()为例)
你main.cpp里的unido()目前没有参数,得改成能接收这些数组和长度的形式,同时注意和辅助cpp里的同名函数区分开(或者直接统一逻辑):
void unido(int* arr1, int cant1, int* arr2, int cant2){ cout<< "----------------------------------------"<<endl; cout<< "El arreglo union de ambos conjuntos es: "<<endl; // 调用辅助cpp里的函数获取结果 int* resultado = unido(arr1, cant1, arr2, cant2); // 这里要添加打印结果数组的逻辑,记得最后释放内存! // 示例:打印结果(假设你会在辅助函数里返回正确的数组和记录长度) // for(int i=0; i<resultado_length; i++) { ... } delete[] resultado; // 释放动态分配的内存,避免泄漏 };
3. 修正C++不支持的变长数组问题
你现在用的int arr1[cant1]是C99的变长数组特性,C++标准并不认可,虽然部分编译器兼容,但为了代码可移植性和避免栈溢出,建议换成动态分配的数组:
// 替换原来的int arr1[cant1]; int* arr1 = new int[cant1]; // 同理处理arr2 int* arr2 = new int[cant2]; // 在conjuntos()函数结束前,记得释放内存 delete[] arr1; delete[] arr2;
额外优化小建议
如果后续要扩展功能,把集合封装成结构体更整洁:
struct Conjunto { int* datos; int tamano; };
这样传递参数时只需要传两个Conjunto对象,代码可读性会高很多;另外,辅助函数返回结果时,最好同时返回结果数组的长度(比如用结构体或者指针参数传递),不然调用者不知道要打印多少元素。
内容的提问来源于stack exchange,提问作者David Leon
相关产品推荐
相关产品推荐

