3.0 KiB
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 循环打印数组的元素。