为了账号安全,请及时绑定邮箱和手机立即绑定

将数组作为参数传递给C中的函数

将数组作为参数传递给C中的函数

C
慕后森 2019-08-02 16:02:37
将数组作为参数传递给C中的函数我编写了一个包含数组作为参数的函数,并通过传递数组的值来调用它,如下所示。void arraytest(int a[]){     // changed the array a     a[0]=a[0]+a[1];     a[1]=a[0]-a[1];     a[0]=a[0]-a[1];}void main(){     int arr[]={1,2};     printf("%d \t %d",arr[0],arr[1]);     arraytest(arr);     printf("\n After calling fun arr contains: %d\t %d",arr[0],arr[1]);}我发现虽然我在打电话arraytest()函数通过传递值来实现,该函数的原始副本是int arr[]都变了。你能解释一下为什么吗?
查看完整描述

3 回答

?
慕妹3242003

TA贡献1824条经验 获得超6个赞

将数组作为参数传递时,

void arraytest(int a[])

意味着与

void arraytest(int *a)

所以你修改main中的值。

由于历史原因,数组不是一流的公民,不能按值传递。




查看完整回答
反对 回复 2019-08-03
?
森林海

TA贡献2011条经验 获得超2个赞


在C中,除了少数特殊情况外,数组引用总是“衰变”到指向数组的第一个元素的指针。因此,不可能“按值”传递数组。函数调用中的数组将作为指针传递给函数,这类似于通过引用传递数组。

编辑:有三个这样的特殊情况,数组不会衰减到指向其第一个元素的指针:

  1. sizeof a

    sizeof (&a[0]).

  2. &a

    &(&a[0])

    (与

    &a[0]).

  3. char b[] = "foo"

    char b[] = &("foo").




查看完整回答
反对 回复 2019-08-03
?
海绵宝宝撒

TA贡献1809条经验 获得超8个赞

如果你想将一维数组作为函数中的参数传递。,您必须以下列三种方式之一声明一个正式参数,而这三个声明方法都会产生类似的结果,因为每个方法告诉编译器将收到一个整数指针。.

int func(int arr[], ...){
    .
    .
    .}int func(int arr[SIZE], ...){
    .
    .
    .}int func(int* arr, ...){
    .
    .
    .}

因此,您正在修改原始值。




查看完整回答
反对 回复 2019-08-03
  • 3 回答
  • 0 关注
  • 1096 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信