按引用传递数组并修改值C++
Pass array by reference and modify values C++
我想写一个函数,它接受inArray[3] = {1,2,3,4}
和一个outArray[3]
,并修改函数中的outArray[3]
,现在包含值= {3,4,1,2}。
int main{
int inArray[4] = {1,2,3,4};
int outArray[4];
myFunction(&inArray, &outArray);
}
void myFunction(&inArray, &outArray){
outArray[0] = inArray[2];
outArray[1] = inArray[3];
outArray[2] = inArray[0];
outArray[3] = inArray[1];
}
我在这里做错了什么,我不完全了解如何通过引用传递数组并操作函数中的值。
fiunction 及其调用可以如下所示
const size_t N = 4;
void myFunction( int ( &inArray )[N], int ( &outArray )[N] )
{
outArray[0] = inArray[2];
outArray[1] = inArray[3];
outArray[2] = inArray[0];
outArray[3] = inArray[1];
}
int main()
{
int inArray[N] = {1,2,3,4};
int outArray[N];
myFunction( inArray, outArray );
}
考虑到你的数组定义
int inArray[3] = {1,2,3,4};
包含拼写错误,不会被编译。至少必须有喜欢
int inArray[4] = {1,2,3,4};
或
int inArray[] = {1,2,3,4};
数组的大小为 3,但您尝试在其中存储 4 个元素并在 [3]
处访问第四个元素(具有未定义的行为)。
使它们更大,要么硬编码 4,要么让所有内容自动调整到你用来初始化inArray
的数字列表的当前长度:
int inArray[] = {1,2,3,4}; // automatically sized
int outArray[sizeof inArray / sizeof *inArray];
然后,函数签名应指定参数的数组int
。 有很多方法可以做到这一点:
void myFunction(const int inArray[], int outArray[]) // 1
void myFunction(const int* inArray, int* outArray) // 2
void myFunction(const int (&inArray)[4], int (&outArray)[4]) // 3
template <size_t N>
void myFunction(const int (&inArray)[N], int (&outArray)[N]) // 4
第一个显然是最简单的。
第二个是等效的,因为当调用者传递数组参数时,它们被允许衰减到指针,即使对于 1) 也会发生这种情况,因为数组维度只能在通过引用接受数组时捕获或强制执行,如以下情况...
第三个还确保数组参数恰好有 4 个元素(所以突然间你不能(轻松地)传递一个包含 10 个元素的数组并让它只复制前 4 个元素)。
第四个接受任何大小的数组,但如果从不同大小的数组上的不同调用代码使用,它可能会创建
myFunction
代码的多个副本,可能会为更大的程序使用更多内存。
由于函数体对元素[0]
[3]
进行硬编码,因此它不会调整以在更大的数组中进一步对元素执行操作,但您可以选择使用函数体内的N
值来计算要操作的元素数量。
数组
始终通过引用传递,无需手动通过引用传递。
相关文章:
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- 独立读取-修改-写入顺序
- 当系统的卷被修改时,如何修改WASAPI环回捕获卷
- 修改函数中的指针(将另一个指针作为参数传递)
- 为什么我可以通过引用修改常量返回
- 对于结构,表达式必须是可修改的ivalue
- QML:修改在不同QML文件(而非main.QML)中定义的子对象的属性
- 为什么不能修改对象中的值?另外,我如何改进此链表?
- 修改创建帐户程序
- 我应该如何修改此代码以使用给定字符串中的字母打印菱形图案
- 如何从子成员函数修改父公共成员变量
- 修改 VS Code 中的默认C++代码段
- 为什么在我的函数类型后使用引用运算符 (&) 允许我修改它返回的值?
- 如何使用递归打印修改后的星号三角形图案
- 已修改的LinkedList未在文本文件本身中更新
- C++RapidXml-使用first_node()遍历以修改XML文件中节点的值
- 为什么可以修改数组 b?
- 将 C++ 类与 Rcpp 一起使用,从 C 或 R 修改它
- 修改的Fibbonaci C++得到一个大的负数
- clang 插件:在编译过程中修改 AST