实参是数组的函数调用c 语言
时间: 2023-05-23 21:07:40 浏览: 81
A:
在 C 语言中,如果一个函数的形参是指针或数组类型,那么在函数调用时,实参可以是一个数组名或指针名。
举个例子,假设有一个函数,它的形参是一个整型数组:
```
void printArray(int arr[], int size) {
for (int i = 0; i < size; i++) {
printf("%d ", arr[i]);
}
printf("\n");
}
```
那么在函数调用时,实参可以是一个数组名或指针名,比如:
```
int main() {
int array1[5] = {1, 2, 3, 4, 5};
int *array2 = array1;
printArray(array1, 5);
printArray(array2, 5);
return 0;
}
```
在上面的例子中,`printArray` 函数被调用了两次,第一次传入的实参是数组名 `array1`,第二次传入的实参是指针名 `array2`,但是它们都能正常被函数处理,并输出数组中的元素。
需要注意的是,在传递数组作为函数参数时,函数内部并不会复制整个数组,而是会传递数组的指针(即数组的首元素地址),因此在函数内部对数组的修改也会影响到函数外部的数组。
相关问题
在函数调用时,函数的实参用数组指针和用数组名有什么异同?
当函数的形参为指针类型时,传递实参可以使用数组名或数组指针,它们的异同如下:
1. 数组名传递:传递的是数组首元素的地址,实际上是一个指针。在函数内部可以通过指针算术运算访问整个数组,但不能修改数组名指向的地址,因为数组名是常量。
2. 数组指针传递:传递的是数组指针的地址,可以通过指针算术运算访问整个数组,也可以修改指针指向的地址。
在使用时,可以根据实际情况选择使用数组名或数组指针传递参数。如果需要在函数内部修改指针指向的地址,就要使用数组指针传递参数。否则,就可以使用数组名传递参数。
用c语言写定义长度为10的整型数组,调用函数f1对该数组元素赋值(要求实参、形参均为指针变量),调用函数f2对其进行由小到大的排序(要求实参为数组名、形参为指针变量)。在主函数中输出排序前和排序后的数组。
好的,以下是实现代码:
```c
#include <stdio.h>
void f1(int *pArr) { // 对数组元素赋值
printf("请输入数组的元素:\n");
for(int i = 0; i < 10; i++) {
scanf("%d", pArr+i);
}
}
void f2(int arr[], int *p) { // 对数组元素按照由小到大的顺序排序
for(int i = 0; i < 10; i++) {
for(int j = i+1; j < 10; j++) {
if(arr[i] > arr[j]) { // 如果前一个元素比后一个元素大,交换它们的位置
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
for(int i = 0; i < 10; i++) {
*(p+i) = arr[i]; // 将排序后的结果存储到指针变量中
}
}
int main() {
int arr[10], sorted_arr[10];
f1(arr); // 调用函数f1对数组元素赋值
f2(arr, sorted_arr); // 调用函数f2对数组元素按照由小到大的顺序排序
printf("排序前的数组:\n");
for(int i = 0; i < 10; i++) {
printf("%d ", arr[i]);
}
printf("\n排序后的数组:\n");
for(int i = 0; i < 10; i++) {
printf("%d ", sorted_arr[i]);
}
printf("\n");
return 0;
}
```
解释一下代码:
1. 在 `main` 函数中定义了两个长度为 10 的整型数组 `arr` 和 `sorted_arr`;
2. `f1` 函数中,通过指针变量传递数组实参,从键盘上依次输入 10 个整数,并将它们存储到数组 `arr` 中;
3. `f2` 函数中,通过数组名和指针变量作为实参,遍历数组 `arr`,对其中的元素按照由小到大的顺序进行排序,并将排序后的结果存储到指针变量 `p` 中;
4. 在 `main` 函数中,先调用 `f1` 函数对数组 `arr` 进行赋值,然后调用 `f2` 函数对数组 `arr` 进行排序,将排序后的结果存储到数组 `sorted_arr` 中,最后分别输出排序前和排序后的数组。
希望这个代码可以帮助你理解如何使用数组名和指针变量作为函数参数。如果还有其他问题,请继续提问!