C语言 地址传递举例
时间: 2023-11-23 13:54:19 浏览: 48
当我们需要在函数中修改原始变量的值时,可以使用地址传递。以下是一个使用地址传递的示例代码:
```c
#include <stdio.h>
// 交换两个整数的值
void swap(int* a, int* b) {
int temp = *a;
*a = *b;
*b = temp;
}
int main() {
int num1 = 10;
int num2 = 20;
printf("交换前:num1 = %d, num2 = %d\n", num1, num2);
swap(&num1, &num2); // 传递变量的地址
printf("交换后:num1 = %d, num2 = %d\n", num1, num2);
return 0;
}
```
输出结果为:
```
交换前:num1 = 10, num2 = 20
交换后:num1 = 20, num2 = 10
```
在上述示例中,我们定义了一个`swap`函数,接受两个整型指针作为参数。在函数内部,我们通过解引用操作符`*`访问指针所指向的值,并使用一个临时变量进行交换操作。通过传递变量的地址给函数,我们实现了在函数内部修改原始变量的值。
在`main`函数中,我们声明了两个整型变量`num1`和`num2`,然后调用`swap`函数来交换它们的值。通过地址传递,`swap`函数可以直接修改`num1`和`num2`的值,使得交换操作在函数外部也生效。
相关问题
auto按引用传递举例c++
当我们在C语言中使用auto变量时,它会根据初始化的表达式来推断变量的类型。然而,在C语言中,auto变量默认是按值传递的,而不是按引用传递。
下面是一个简单的例子来说明这个问题:
```c
#include <stdio.h>
void modifyValue(int val) {
val = 10;
}
void modifyReference(int* ref) {
*ref = 10;
}
int main() {
auto int num1 = 5;
auto int* num2 = &num1;
printf("Before modification: num1 = %d\n", num1);
modifyValue(num1);
printf("After value modification: num1 = %d\n", num1);
printf("Before modification: *num2 = %d\n", *num2);
modifyReference(num2);
printf("After reference modification: *num2 = %d\n", *num2);
return 0;
}
```
在上面的例子中,我们定义了一个auto变量`num1`和一个auto指针变量`num2`。然后,我们调用了两个函数`modifyValue`和`modifyReference`来修改这些变量。
`modifyValue`函数按值传递了`num1`,因此在函数内部对`val`的修改不会影响到原始的`num1`。所以,即使在函数内部将`val`设置为10,最终输出的`num1`仍然是5。
相反,`modifyReference`函数按引用传递了`num2`,通过指针访问变量的值并进行修改。因此,在函数内部通过修改`*ref`的值将`num2`指向的内存中的值设置为10。所以,最终输出的`*num2`是10。
这个例子展示了C语言中auto变量的按值传递特性,以及如何通过指针实现按引用传递。
举例说明C语言函数指针数组
当我们需要在C语言中通过函数指针来动态选择和调用不同的函数时,可以使用函数指针数组。函数指针数组是一个数组,它的每个元素都是一个函数指针。
下面是一个简单的示例,展示了如何定义和使用函数指针数组:
```c
#include <stdio.h>
int add(int a, int b) {
return a + b;
}
int subtract(int a, int b) {
return a - b;
}
int multiply(int a, int b) {
return a * b;
}
int main() {
// 定义一个包含三个函数指针的数组
int (*funcPtrArray[3])(int, int) = {add, subtract, multiply};
int a = 10;
int b = 5;
for (int i = 0; i < 3; i++) {
// 通过函数指针数组调用不同的函数
int result = funcPtrArray[i](a, b);
printf("Result: %d\n", result);
}
return 0;
}
```
在上述示例中,我们定义了一个包含三个函数指针的数组 `funcPtrArray`,每个函数指针都可以指向一个返回类型为 `int`,参数类型为两个 `int` 的函数。我们将 `add`、`subtract` 和 `multiply` 这三个函数的地址分别赋给数组的三个元素。
然后,在 `main` 函数中,我们循环遍历函数指针数组,并通过函数指针调用不同的函数,将变量 `a` 和 `b` 作为参数传递给相应的函数。最后,将结果打印出来。
通过函数指针数组,我们可以根据需要动态地选择和调用不同的函数,使程序更加灵活和可扩展。在实际开发中,函数指针数组常用于实现状态机、命令分发等场景。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)