具有数组参数的函数
数组不能通过值传递给函数。但是,数组名是一个指针,因此仅将数组名传递给函数就是将指针传递给数组。
例如:
int add_up (int *a, int num_elements);int main() {int orders[5] = {100, 220, 37, 16, 98};printf("Total orders is %d\n", add_up(orders, 5)); return 0;
}int add_up (int *a, int num_elements) {int total = 0;int k;for (k = 0; k < num_elements; k++) {total += a[k];}return (total);
}
输出: "Total orders is 471"
【选词填空】声明函数foo(),该函数使用指针数组参数并返回整数。
foo(int arr);
*
&
int
float
返回数组的函数
正如可以将指向数组的指针传递给函数一样,可以返回指向数组的指针,如以下程序所示:
int * get_evens();int main() {int *a;int k;a = get_evens(); /* get first 5 even numbers */for (k = 0; k < 5; k++)printf("%d\n", a[k]); return 0;
}int * get_evens() {static int nums[5];int k;int even = 0;for (k = 0; k < 5; k++) {nums[k] = even += 2;}return (nums);
}
请注意,声明了一个指针(而不是数组)来存储该函数返回的值。
还要注意,当从函数传递局部变量时,需要在函数中将其声明为静态变量。
请记住,a[k] 与 *(a + k)相同。
【选词填空】声明一个返回int数组的函数。
int getArray();
$
&
*
%
【填空题】声明一个带有两个整数参数并返回浮点值(单精度)的函数。
my_func(int a, b);
【选词填空】定义递归打印功能,该功能可打印从n到0的数字。
void print(int n) {
if (n < 0) ;
printf("%d", n);
(n - 1);
}
back
return
printf
【选词填空】打印数组的元素。
int arr[] = {1, 2, 3, 4, 5};
(int x = 0; x < 5; x++) {
printf("%d", [x]);
}
arr
if
for
x
【选词填空】声明一个指向num变量的指针,并通过该指针将其值加倍。
int num = 42;
int *ptr = num;
ptr *= 2;
&
!
*
$
【选词填空】声明swap函数,该函数需要两个整数指针并交换它们所指向的值。
void swap( a, int* b) {
int temp = *a;
*a = *b;
b = temp;
}
*int
int*
++
*
【填空题】该代码的输出是什么?
int * test() {
static int x[4];
for(int i=0;i<4;i++){
x[i] = i%2;
}
return x;
}
int main() {
int * arr = test();
printf("%d", *(arr+3));
}