C语言指针函数参数

C语言指针函数参数教程

C 语言 中,函数参数 不仅可以是基本的 数据类型,还可以是 指针类型,用指针变量作函数参数可以将函数外部的地址传递到函数内部,使得在函数内部可以操作函数外部的数据,并且这些数据不会随着函数的结束而被销毁。

如果,我们需要在函数内部修改传入的基本类型的参数的值,那么我们只能通过指针的方式来传递参数。

C语言指针函数参数详解

语法

returnType funcName(paramType1 *param1) { return val }

说明

我们定义了一个函数,该函数的 返回值 为 returnType 类型,函数名为 funcName,该函数接受一个指针做为函数参数,其类型为 paramType1。

案例

指针做函数参数

使用指针做函数参数,修改参数的值

#include <stdio.h> void inc(int num) { num++; } int main() { printf("嗨客网(www.haicoder.net)\n\n"); int num = 1024; printf("before change num = %d\n", num); inc(num); printf("after change num = %d\n", num); return 0; }

程序运行后,控制台输出如下图所示:

25_C语言指针做函数参数.png

我们首先,定义了一个函数 inc,该函数接受一个 int 类型 参数,在函数体里面,我们将传入的参数通过 自增 实现了加一。

最后,我们定义了一个 变量 num,并调用了函数 inc 来修改变量 num 的值,修改完之后,我们打印修改后的变量 num 的值,我们发现,变量 num 并未被修改。

这是因为,普通的函数的参数传递的是一份拷贝,即,我们在 main 函数传递进去的函数参数 num 和我们在函数 inc 里面使用的 num,不是同一个 num 变量。

因此,我们在函数 inc 里面修改了变量 num 的值并不会影响到我们传入的变量 num 的值。现在,我们通过指针的方式来传递参数,修改程序如下:

#include <stdio.h> void inc(int *num) { (*num)++; } int main() { printf("嗨客网(www.haicoder.net)\n\n"); int num = 1024; printf("before change num = %d\n", num); inc(&num); printf("after change num = %d\n", num); return 0; }

程序运行后,控制台输出如下图所示:

26_C语言指针做函数参数.png

这次,我们通过指针的方式,将变量 num 的地址传入了函数 inc,在 inc 函数里面,我们将变量 num 的值加一,这次,我们看到,我们修改了变量 num 的值。

这是因为,我们在函数 inc 里面的 num 保存了 main 函数里面变量 num 的地址,接着,我们通过 *num 这样的形式,其实就是获得了 main 函数里面的 num 变量。

因此,通过这种指针的方式,我们可以修改 main 函数中传入的参数的值。

指针做函数参数

使用指针做函数参数,实现交换两个变量

#include <stdio.h> void swap(int num1, int num2) { int temp; //临时变量 temp = num1; num1 = num2; num2 = temp; } int main() { printf("嗨客网(www.haicoder.net)\n\n"); int num1 = 1024, num2 = 1100; printf("before change num1 = %d, num2 = %d\n", num1, num2); swap(num1, num2); printf("after change num1 = %d, num2 = %d\n", num1, num2); return 0; }

程序运行后,控制台输出如下图所示:

27_C语言指针做函数参数.png

我们首先,定义了一个函数 swap,该函数接受两个 int 类型参数,在函数体里面,我们将传入的参数通过中间变量的方式,实现了交换。

最后,我们定义了两个变量 num1 和 num2,并调用了函数 swap 来交换这两个变量的值,修改完之后,我们打印交换后的变量 num1 和 num2 的值,我们发现,变量 num1 和变量 num2 并未被交换。

这是因为,普通的函数的参数传递的是一份拷贝,即,我们在 main 函数传递进去的函数参数 num 和我们在函数 swap 里面使用的 num,不是同一个 num 变量。

因此,我们在函数 swap 里面修改了变量 num 的值并不会影响到我们传入的变量 num 的值。现在,我们通过指针的方式来传递参数,修改程序如下:

#include <stdio.h> void swap(int *num1, int *num2) { int temp; //临时变量 temp = *num1; *num1 = *num2; *num2 = temp; } int main() { printf("嗨客网(www.haicoder.net)\n\n"); int num1 = 1024, num2 = 1100; printf("before change num1 = %d, num2 = %d\n", num1, num2); swap(&num1, &num2); printf("after change num1 = %d, num2 = %d\n", num1, num2); return 0; }

程序运行后,控制台输出如下图所示:

28_C语言指针做函数参数.png

这次,我们通过指针的方式,将变量 num1 和变量 num2 的地址传入了函数 swap,最后,我们实现了交换了两个参数的值。

C语言指针函数参数总结

在 C 语言中,函数的参数不仅可以是基本的数据类型,还可以是指针类型,用指针变量作函数参数可以将函数外部的地址传递到函数内部,使得在函数内部可以操作函数外部的数据,并且这些数据不会随着函数的结束而被销毁。

如果,我们需要在函数内部修改传入的基本类型的参数的值,那么我们只能通过指针的方式来传递参数。