从c中的函数返回数组和int数据类型

时间:2015-05-08 18:06:12

标签: c function

代码1

    main()
{
    int i ,a[5];
    for(i=0;i<5;i++)
    {
        scanf("%d",&a[i]);
    }
    yo(a);
    for(i=0;i<5;i++)
    {
        printf("%d ",a[i]);
    }
}
void yo(int a[5])
{
    int i;
    for(i=0;i<5;i++)
    {
        a[i]=a[i]+1;
    }
}

在上面的代码中没有返回值(我在函数中返回void数据类型)数组&#39; a&#39;在主函数中进行了更新,但是当我不使用数组并使用普通的int数据类型时,值会更新,请参阅代码2

main()
{
    int a;
    a=50;
    yo(a);
    printf("%d",a);
}
void yo(int z)
{
    z=150;
}

1 个答案:

答案 0 :(得分:2)

这是因为数组a[]作为指针传递,而不是数组的副本,并且数组被直接修改。如果将函数声明为

void yo(int *a)

将以完全相同的方式工作。但是如果你传递一个int,例如

void yo(int a) {
    a += 1;
}

该函数只接收int副本,并且不会影响调用者。要影响传递的变量,你可以

void yo(int *a) {
    *a += 1;
}

猜猜是什么?这与我之前传递数组时的声明相同。传递指针时,可以将其视为数组,也可以视为单个值 - 即长度为1的数组。