160 作者 网站建设国内最新新闻大事
在 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
函数中已经被修改