geekdoc-python-zh/docs/overiq/040.md

3.0 KiB

C 语言中的一维数组和函数

原文:https://overiq.com/c-programming-101/one-dimensional-array-and-function-in-c/

最后更新于 2020 年 7 月 27 日


将一维数组元素传递给函数

我们可以像传递任何普通变量一样传递一维数组的元素。下面的示例演示了相同的内容。

#include<stdio.h>
void odd_or_even(int a);

int main()
{
    int my_arr[] = {13,56,71,38,93}, i;

    for(i = 0; i < 5; i++)
    {
        // passing one element at a time to odd_or_even() function
        odd_or_even(my_arr[i]); 
    }

    // signal to operating system program ran fine
    return 0;
}

void odd_or_even(int a)
{
    if(a % 2 == 0)
    {
        printf("%d is even\n", a);
    }

    else
    {
        printf("%d is odd\n", a);
    }
}

预期输出:

13 is odd
56 is even
71 is odd
38 is even
93 is odd

将整个数组传递给函数

就像普通变量一样,您可以将数组变量传递给函数。但是在此之前,请确保将形式参数声明为相同数据类型的数组变量。例如:

int main()
{
    ...
    int a[10];
    ...
    function_1(a);
    ...
    return 0;
}

void function_1(int arr[10])
{
    ...
    statement ;1
    ...
}

这里我们将10整数数组传递给function_1(),这就是为什么function_1()的形式参数也被声明为10整数数组。

在形式参数中指定数组的大小是可选的。这意味着您也可以如下声明function_1()的形式参数:

void function_1(int arr[])
{
    ...
    statement 1;
    ...
}

在学习形式和实际论点的同时,我们了解到形式论点中的变化不会影响实际论点。数组不是这样。当数组作为实际参数传递时,函数可以访问原始数组,因此函数内部所做的任何更改都会影响原始数组。

#include<stdio.h>
void new_array(int a[]);

int main()
{
    int my_arr[] = {13,56,71,38,93}, i;

    printf("Original array: \n\n");

    for(i = 0; i < 5; i++)
    {
        printf("%d ", my_arr[i]);
    }

    new_array(my_arr);

    printf("\n\nModified array : \n\n");

    for(i = 0; i < 5; i++)
    {
        printf("%d ", my_arr[i]);
    }

    // signal to operating system program ran fine
    return 0;
}

void new_array(int a[])
{
    int i;

    // multiply original elements by 2

    for(i = 0; i < 5; i++)
    {
        a[i] = 2 * a[i];
    }
}

预期输出:

Original Array:

13 56 71 38 93

Modified array:

26 112 142 76 186

工作原理:

main()函数中的第一个 for 循环打印数组元素的初始值。在第 15 行中,new_array()函数被调用,实际参数为my_arr。控制转移到功能new_array()。该函数将数组的每个元素乘以2,并将这个新值赋回当前索引。由于new_array()正在处理原始数组,而不是原始数组的副本,因此new_array()函数所做的任何更改都会影响原始数组。当函数结束时,控制再次传递回main()函数,其中第二个 for 循环打印数组的元素。