如何解决我应该通过引用将int数组传递给函数吗?
下面是我正在谈论的基本概念。
#include <stdio.h>
void someFunction(int arr[],int n)
{
for (int i = 0; i < n; ++i)
arr[i] *= 2;
}
void someFunctionByReference(int *arr,int n)
{
for (int i = 0; i < n; ++i)
arr[i] *= 2;
}
int main()
{
int arr[] = {5,3,2,4,5,7,0};
int n = sizeof(arr) / sizeof(arr[0]);
someFunction(arr,n);
int arr2[] = {5,0};
int n2 = sizeof(arr2) / sizeof(arr2[0]);
someFunctionByReference(arr2,n2);
return 0;
}
这两个函数(如我所见)都执行相同的操作。它们甚至包含相同的代码。但是,我想了解两者之间的区别,以及在某些情况下是否存在适当且不合适的方法。
解决方法
函数调用和定义都是相同的。在大多数情况下,数组类型的表达式将“衰减”为指针类型的表达式,并且表达式的值将成为第一个元素的地址。在函数参数声明的上下文中,T a[N]
和T a[]
被解释为T *a
-参数是一个指针,而不是数组对象。这是因为当您将数组表达式作为函数参数传递时,该函数实际上将接收指针值,而不是数组。
此行为是数组表达式所独有的-其他聚合类型,例如struct
和union
类型不会以这种方式“衰减”。如果您传递带有数组成员的结构类型,则该数组成员的内容将被复制。
这也不是“通过引用传递”的示例。 C按值传递所有函数参数,没有例外。有时,这些值是指针。这个特殊的奇怪之处只是C如何对待数组的结果。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。