函数调用中,实参为什么没有类型,而函数定义中形参前面要有类型
时间: 2024-04-19 20:30:37 浏览: 21
在函数调用中,实参没有类型是因为编译器在进行函数调用时,会根据函数的声明和定义来确定实参的类型。编译器会根据函数声明中的参数类型来推断实参的类型,并进行相应的类型转换。
而在函数定义中,形参前面要有类型是因为函数定义是函数的具体实现,编译器需要知道形参的类型来正确地分配内存和进行参数传递。函数定义提供了函数的实际代码,包括参数列表和返回值类型,因此需要明确指定形参的类型。
总结起来,函数调用中实参没有类型是因为编译器可以通过函数声明推断实参的类型,而函数定义中形参前面要有类型是为了让编译器知道如何正确处理这些参数。
相关问题
c++1.用数组作为函数形参实现函数,函数调用时实参为数组。 2.用数组作为函数形参实现函数,函数调用时实参为指针。 3.用指针作为函数形参实现函数,函数调用时实参为数组。 用指针作为函数形参实现函数,函数调用时实参为指针。
1. 用数组作为函数形参实现函数,函数调用时实参为数组:
```c
void func(int arr[], int len) {
// 函数体
}
int main() {
int arr[5] = {1, 2, 3, 4, 5};
func(arr, 5);
return 0;
}
```
2. 用数组作为函数形参实现函数,函数调用时实参为指针:
```c
void func(int *arr, int len) {
// 函数体
}
int main() {
int arr[5] = {1, 2, 3, 4, 5};
func(arr, 5);
return 0;
}
```
3. 用指针作为函数形参实现函数,函数调用时实参为数组:
```c
void func(int *arr, int len) {
// 函数体
}
int main() {
int arr[5] = {1, 2, 3, 4, 5};
func(&arr[0], 5);
return 0;
}
```
4. 用指针作为函数形参实现函数,函数调用时实参为指针:
```c
void func(int *arr, int len) {
// 函数体
}
int main() {
int arr[5] = {1, 2, 3, 4, 5};
func(arr, 5);
return 0;
}
```
函数与指针作为形参能够改变调用函数实参的值原理是什么?
函数和指针作为形参能够改变调用函数实参的值,是因为函数参数传递的是实参的副本,而指针作为形参可以通过间接访问修改实参所在内存地址中的值。
当我们将一个变量通过值传递给函数时,函数会创建该变量的副本,并在函数内部使用这个副本进行操作。这意味着对于函数内部来说,它操作的是一个新的变量,而不是原始的实参。因此,在函数内部对形参的修改不会影响到原始的实参。
但是,当我们将指针作为形参传递给函数时,实际上是将实参的内存地址传递给了函数。函数内部通过这个指针可以直接访问和修改实参所在内存地址中的值。因此,通过指针形参可以改变实参的值。
简而言之,通过传递指针作为形参,函数可以直接操作实参所在内存地址中的值,从而改变实参的值。而通过传递值作为形参,函数只能操作副本,无法改变原始实参的值。