引用作为函数参数和指针作为函数参数有什么区别,举个例子
时间: 2024-09-08 22:04:41 浏览: 55
引用作为函数参数和指针作为函数参数的主要区别在于它们如何传递数据以及对原始变量的改变。
**引用**:
引用是一种别名,当你将引用传递给函数时,实际上是将原始变量的地址复制一份。这意味着函数内部对引用的操作会直接反映到原始变量上。例如:
```cpp
void swap(int& a, int& b) {
int temp = a;
a = b;
b = temp;
}
int main() {
int x = 5, y = 10;
swap(x, y); // x 和 y 的值会被互换
return 0;
}
```
在这个例子中,`swap`函数通过引用修改了`x`和`y`的值。
**指针**:
函数参数可以是一个指向变量的指针,而不是变量本身。当我们传递指针时,复制的是指针的地址,而非实际值。如果函数改变了指针所指向的对象,那么这个改变不会影响原函数外部。例如:
```cpp
void changeValue(int* ptr) {
*ptr = 20; // 改变指针所指的值
}
int main() {
int x = 5;
changeValue(&x); // x 的值不会改变,仍然是5
return 0;
}
```
在这里,`changeValue`函数通过指针改变了它所接收到的整数值,但`main`函数中的`x`保持不变。
相关问题
指针作为函数参数
指针作为函数参数是一种常见的C语言编程技巧。它允许函数修改调用者传递给它的变量的值。通常,当我们需要在函数内部修改调用者传递的变量的值时,我们使用指针作为函数参数。
例如,假设我们有一个函数用于交换两个整数变量的值:
```
void swap(int *a, int *b) {
int temp = *a;
*a = *b;
*b = temp;
}
```
在这个函数中,我们使用了指针作为参数。`a`和`b`是指向整数变量的指针,它们指向调用者传递给函数的两个变量。通过解引用指针,我们可以访问这些变量的值并进行交换。
在调用函数时,我们需要传递两个整数变量的地址作为参数:
```
int x = 10, y = 20;
swap(&x, &y);
```
在这个例子中,我们把变量`x`和`y`的地址作为参数传递给了`swap`函数。函数内部交换了这两个变量的值,因此在函数返回后,`x`的值将变成20,`y`的值将变成10。
在主函数中,可以创建一个指向局部变量的指针,并将该指针作为参数传递给子函数。子函数可以通过指针访问和修改主函数的局部变量。举个c语言例子
当我们在主函数中创建一个指向局部变量的指针,并将该指针作为参数传递给子函数时,子函数就可以通过指针来访问和修改主函数的局部变量。以下是一个简单的C语言示例:
```c
#include <stdio.h>
void modifyVariable(int* ptr) {
*ptr = 20; // 通过指针修改局部变量的值
}
int main() {
int num = 10;
printf("Before modification: %d\n", num);
modifyVariable(&num); // 传递指向局部变量的指针
printf("After modification: %d\n", num);
return 0;
}
```
在上面的示例中,我们定义了一个名为`modifyVariable`的子函数。该函数接受一个整型指针作为参数,并通过指针修改该指针指向的变量的值。
在主函数`main`中,我们声明了一个整型变量`num`并初始化为10。然后,我们调用`modifyVariable`函数,并将`num`的地址(即指向`num`的指针)作为参数传递给它。
在`modifyVariable`函数内部,我们通过指针解引用`ptr`,并将20赋值给它指向的变量。这将修改主函数中的局部变量`num`的值。
最后,我们在主函数中打印修改前和修改后的`num`的值。输出结果将是:
```
Before modification: 10
After modification: 20
```
通过将指向局部变量的指针传递给子函数,我们可以在子函数中访问和修改主函数的局部变量。这种方法对于需要在子函数中修改主函数中的变量时非常有用。但请注意,要谨慎使用指针,确保在使用指针时不会导致悬空指针或其他内存错误。
阅读全文