在 C 语言中,将指针传递给函数是一种常见且重要的编程技巧,它可以让函数直接操作调用者提供的内存区域,实现数据的修改、避免数据的复制开销等。下面为你提供几个不同场景下传递指针给函数的例子。
1. 修改调用者的变量值
通过传递变量的指针给函数,函数可以直接修改该变量的值。
收起
c
#include <stdio.h>
// 定义一个函数,接收一个整型指针作为参数,用于将该指针指向的值加 1
void increment(int *num) {
(*num)++;
}
int main() {
int number = 10;
printf("递增前的数值: %d\n", number);
// 传递 number 的地址给 increment 函数
increment(&number);
printf("递增后的数值: %d\n", number);
return 0;
}
代码解释:
increment
函数接收一个int
类型的指针num
,通过(*num)++
操作对指针所指向的变量的值进行加 1 操作。- 在
main
函数中,定义了一个整型变量number
并初始化为 10,然后将number
的地址&number
传递给increment
函数。 - 函数调用结束后,
number
的值在main
函数中已经被修改为 11。
2. 交换两个变量的值
通过传递两个变量的指针给函数,可以实现两个变量值的交换。
收起
c
#include <stdio.h>
// 定义一个函数,接收两个整型指针作为参数,用于交换它们指向的值
void swap(int *a, int *b) {
int temp = *a;
*a = *b;
*b = temp;
}
int main() {
int x = 5;
int y = 10;
printf("交换前: x = %d, y = %d\n", x, y);
// 传递 x 和 y 的地址给 swap 函数
swap(&x, &y);
printf("交换后: x = %d, y = %d\n", x, y);
return 0;
}
代码解释:
swap
函数接收两个int
类型的指针a
和b
,通过一个临时变量temp
来交换a
和b
所指向的变量的值。- 在
main
函数中,定义了两个整型变量x
和y
,并将它们的地址传递给swap
函数。 - 函数调用结束后,
x
和y
的值在main
函数中已经完成交换。
3. 操作数组
传递数组名(本质是数组首元素的地址)给函数,函数可以对数组进行操作。
收起
c
#include <stdio.h>
// 定义一个函数,接收一个整型数组和数组的大小作为参数,用于打印数组元素
void printArray(int *arr, int size) {
for (int i = 0; i < size; i++) {
printf("%d ", arr[i]);
}
printf("\n");
}
// 定义一个函数,接收一个整型数组和数组的大小作为参数,用于将数组元素都乘以 2
void multiplyByTwo(int *arr, int size) {
for (int i = 0; i < size; i++) {
arr[i] *= 2;
}
}
int main() {
int array[] = {1, 2, 3, 4, 5};
int size = sizeof(array) / sizeof(array[0]);
printf("原始数组: ");
printArray(array, size);
// 传递数组名(即数组首元素地址)给 multiplyByTwo 函数
multiplyByTwo(array, size);
printf("乘以 2 后的数组: ");
printArray(array, size);
return 0;
}
代码解释:
printArray
函数接收一个int
类型的指针arr
和数组的大小size
,通过循环遍历数组并打印每个元素。multiplyByTwo
函数接收同样的参数,通过循环将数组中的每个元素都乘以 2。- 在
main
函数中,定义了一个整型数组array
,并将其首元素地址传递给printArray
和multiplyByTwo
函数。 - 函数调用结束后,数组
array
的元素在main
函数中已经被修改