C 语言中的作为函数参数的指针
原文:https://www.studytonight.com/c/pointer-with-function-in-c.php
指针作为函数参数用于保存函数调用期间传递的参数地址。这也被称为通过引用调用。当通过引用调用函数时,对引用变量所做的任何更改都会影响原始变量。
示例时间:使用指针交换两个数字
#include <stdio.h>
void swap(int *a, int *b);
int main()
{
int m = 10, n = 20;
printf("m = %d\n", m);
printf("n = %d\n\n", n);
swap(&m, &n); //passing address of m and n to the swap function
printf("After Swapping:\n\n");
printf("m = %d\n", m);
printf("n = %d", n);
return 0;
}
/*
pointer 'a' and 'b' holds and
points to the address of 'm' and 'n'
*/
void swap(int *a, int *b)
{
int temp;
temp = *a;
*a = *b;
*b = temp;
}
交换后 m = 10n = 20:m = 20n = 10
返回指针变量的函数
一个函数也可以return
一个指向调用函数的指针。在这种情况下,你必须小心,因为函数的局部变量不在函数之外。它们只在函数内部有作用域。因此,如果您返回一个连接到局部变量的指针,当函数结束时,该指针将什么也不指向。
#include <stdio.h>
int* larger(int*, int*);
void main()
{
int a = 15;
int b = 92;
int *p;
p = larger(&a, &b);
printf("%d is larger",*p);
}
int* larger(int *x, int *y)
{
if(*x > *y)
return x;
else
return y;
}
92 更大
返回有效指针的安全方法。
要么使用带有函数的参数。因为传递给函数的参数是在调用函数内部声明的,因此它们也将存在于函数外部。
或者,在函数内部使用
static
局部变量并返回它们。由于静态变量在main()
函数退出之前有一个生命周期,因此它们可以通过程序使用。
指向函数的指针
可以声明一个指向某个函数的指针,该指针可以用作另一个函数的参数。指向函数的指针声明如下,
type (*pointer-name)(parameter);
这里有一个例子:
int (*sum)(); //legal declaration of pointer to function
int *sum(); //This is not a declaration of pointer to function
当一个函数指针被分配了该函数的名称时,它可以指向一个特定的函数。
int sum(int, int);
int (*s)(int, int);
s = sum;
这里s
是一个函数sum
的指针。现在可以使用函数指针s
调用sum
,同时提供所需的参数值。
s (10, 20);
指向函数的指针示例
#include <stdio.h>
int sum(int x, int y)
{
return x+y;
}
int main( )
{
int (*fp)(int, int);
fp = sum;
int s = fp(10, 15);
printf("Sum is %d", s);
return 0;
}
Twenty-five
复杂函数指针示例
你会发现周围有很多复杂的函数 指针的例子,让我们看一个这样的例子,试着去理解它。
void *(*foo) (int*);
看似复杂,其实很简单。在这种情况下(*foo)
是函数的指针,它的参数是int*
类型,返回类型是void*
。