
通过指针、使用指向变量的指针
在C语言中,改变函数参数的值并不是直接通过传值来实现的,而是通过传递参数的地址(即指针)来实现的。使用指针可以直接访问和修改变量的内存地址,从而达到改变其值的目的。在本文中,我们将详细探讨在C语言中通过指针来改变函数参数值的各种方法和技巧,并提供丰富的示例代码来帮助理解。
一、基本概念
1、值传递与地址传递
在C语言中,函数参数的传递方式主要有两种:值传递和地址传递。值传递是将实际参数的值复制一份传递给函数,函数内对参数的修改不会影响实际参数。而地址传递则是将实际参数的地址传递给函数,函数内通过指针访问和修改实际参数。
2、指针的基本概念
指针是一个变量,其值是另一个变量的地址。通过指针,我们可以间接访问和修改该地址上的变量值。声明一个指针变量时,需要指定其指向的数据类型,并使用*符号来表示。
int a = 10; // 声明一个整型变量
int *p = &a; // 声明一个指向整型变量a的指针p
3、指针与函数
通过将实际参数的地址传递给函数,我们可以在函数内部通过指针来修改实际参数的值。
#include <stdio.h>
// 使用指针改变函数参数的值
void changeValue(int *p) {
*p = 20;
}
int main() {
int a = 10;
printf("Before: %dn", a); // 输出10
changeValue(&a);
printf("After: %dn", a); // 输出20
return 0;
}
在上面的例子中,changeValue函数接收一个指针参数,通过解引用指针*p来修改实际参数的值。
二、通过指针改变基本数据类型的值
1、改变整型值
改变整型值是最简单的例子,我们只需要将整型变量的地址传递给函数。
#include <stdio.h>
void changeIntValue(int *p) {
*p = 100;
}
int main() {
int a = 10;
printf("Before: %dn", a);
changeIntValue(&a);
printf("After: %dn", a);
return 0;
}
2、改变浮点型值
同样地,可以通过传递浮点型变量的地址来改变其值。
#include <stdio.h>
void changeFloatValue(float *p) {
*p = 3.14;
}
int main() {
float f = 1.23;
printf("Before: %.2fn", f);
changeFloatValue(&f);
printf("After: %.2fn", f);
return 0;
}
3、改变字符型值
同理,我们也可以通过传递字符型变量的地址来改变其值。
#include <stdio.h>
void changeCharValue(char *p) {
*p = 'Z';
}
int main() {
char c = 'A';
printf("Before: %cn", c);
changeCharValue(&c);
printf("After: %cn", c);
return 0;
}
三、通过指针改变数组的值
数组在C语言中是以指针形式进行传递的,因此我们可以直接在函数内改变数组元素的值。
1、改变整型数组的值
#include <stdio.h>
void changeArrayValues(int *arr, int size) {
for (int i = 0; i < size; i++) {
arr[i] = i * 10;
}
}
int main() {
int arr[5] = {0, 1, 2, 3, 4};
printf("Before: ");
for (int i = 0; i < 5; i++) {
printf("%d ", arr[i]);
}
printf("n");
changeArrayValues(arr, 5);
printf("After: ");
for (int i = 0; i < 5; i++) {
printf("%d ", arr[i]);
}
printf("n");
return 0;
}
2、改变字符数组的值
字符数组(字符串)也可以通过指针来改变其值。
#include <stdio.h>
void changeStringValue(char *str) {
str[0] = 'H';
str[1] = 'i';
str[2] = '