46 lines
1.3 KiB
Markdown
46 lines
1.3 KiB
Markdown
|
---
|
|||
|
title: Passing pointers to funtions
|
|||
|
localeTitle: 将指针传递给功能
|
|||
|
---
|
|||
|
# 将指针传递给功能
|
|||
|
|
|||
|
C允许将指针传递给函数。要实现此目的,只需将参数声明为指针类型即可。 当您想要修改超出该函数范围的变量时,这种传递函数的方法很有用。
|
|||
|
|
|||
|
```C
|
|||
|
// incorrect implementation of swap
|
|||
|
#include <stdio.h>
|
|||
|
void swap(int a, int b){
|
|||
|
int c;
|
|||
|
c = a;
|
|||
|
a = b;
|
|||
|
b = c;
|
|||
|
}
|
|||
|
int main(){
|
|||
|
int var1 = 10;
|
|||
|
int var2 = 20;
|
|||
|
swap(var1, var2);
|
|||
|
printf("Value of var1: %d \n", var1); // prints 10
|
|||
|
printf("Value of var2: %d \n", var2); // prints 20
|
|||
|
}
|
|||
|
```
|
|||
|
|
|||
|
在此代码示例中,交换函数不能按预期工作,因为它交换了仅存在于该函数范围内的两个变量。为了解决这个问题,我们进行了如下所示的修改。
|
|||
|
|
|||
|
```C
|
|||
|
// correct implementation of swap
|
|||
|
#include <stdio.h>
|
|||
|
void swap(int* a, int* b){
|
|||
|
int c = *a;
|
|||
|
*a = *b;
|
|||
|
*b = c;
|
|||
|
}
|
|||
|
int main(){
|
|||
|
int var1 = 10;
|
|||
|
int var2 = 20;
|
|||
|
swap(&var1, &var2);
|
|||
|
printf("Value of var1: %d \n", var1); // prints 20
|
|||
|
printf("Value of var2: %d \n", var2); // prints 10
|
|||
|
}
|
|||
|
```
|
|||
|
|
|||
|
在第二个代码示例中,您只能更改变量的值,因为您不断地在函数内取消引用指针而不是尝试直接更改值
|