c语言指针函数fun c语言指针函数传参

c语言指针型函数#includestring.h// 导入头文件string.h
#includestdio.h// 导入头文件stdio.h
char *fun(char *t)// 定义函数, 名称fun, 输入参数为char *, 返回值为char *
{
char *p = t;// 把t的值赋值给p, 相当于p指向与t相同的字符串
return pstrlen(t) / 2;// strlen返回值为字符串长度, 然后p位移其一半(向下取整)的距离并返回值
}
int main(int argc, char *argv[])
{
char *str = "abcdefgh"; // str指向字符串“abcdefgh”
str = fun(str);// str调用fun函数, 参数为str, 并将返回值赋值给str
puts(str);// 此时str指向e, 输出为“efgh\n”
return 0;
}
C语言,a=fun;(*a)(&c);是什么意思?这里可以看出,a是一个指向函数的指针,fun是一个函数 , 其参数只有一个指针型参数,(*a)(c)即通过该指向函数的指针调用fun函数,c表示取c的地址 。
示例:求一个数的绝对值程序
#include stdio.h
int abs(int* x)
{
return (*x)0?*x:-(*x);
}
int main()
{
int (*p)(int*);
int a, c;
p = abs;
scanf("%d",c);
a = (*p)(c);//指针调用
printf("c=%d,abs=%d\n",c,a);
return 0;
}
/*
输入:-4
输出:c=-4,abs=4
*/
注意事项:
指向函数的指针变量的一般定义形式为:
数据类型 (*指针变量名)(函数参数列表)//这里数据类型就是函数返回值的类型
定义一个指向函数的指针变量 p, 它不是固定指向哪一个函数的,而只是表示定义这样一个类型的变量,该指针变量是专门用来存放函数的入口地址的 。在程序中把哪一函数的地址赋给该指针变量 , 该指针变量就指向哪一个函数 。在一个函数中,一个函数指针变量可以先后指向同类型的不同函数 。
在给函数指针变量赋值时,只需给出函数名而不必给出函数参数,因为是将函数的入口地址赋给 p,而不涉及 实参和形参的结合问题 。
在函数调用时,只需将( *p ) 代替函数名即可,后面实参依旧 。
对于指向函数的指针变量,像 p,p n.....是无意义的 。
C语言指针对FUN函数调用【c语言指针函数fun c语言指针函数传参】a是函数指针c语言指针函数fun,指向func语言指针函数fun,调用a就是调用fun
b也是函数指针c语言指针函数fun,但是参数是空c语言指针函数fun的 。
w是int数组,
c是整型变量 。
Ac语言指针函数fun: a本身是函数指针 , 而函数指针的返回值是int,类型不匹配 。
B:*a和a是一样的, c是int *型 , 参数类型符合 。所以 这个是合法调用 。
C: b指向的函数指针是无参的,所以b(w)是错的 。
D: fun要求的是int *参数,而b是函数指针,参数类型不匹配 。
于是选B
C语言FUN函数WHILE循环指针观察fun函数 。
i和j分别为参数n1 和n2
而while循环第一句c语言指针函数fun,就是交换s[i]和s[j]c语言指针函数fun的值
然后ij--直到i=j为止 。
于是,这个函数c语言指针函数fun的功能就是把s上,以n1和n2为顶点的部分值,对称交换位置 。效果就是这部分数据变为原本的逆序 。
main中
数组a的初始值为1 2 3 4 5 6 7 8 9 0
首先执行p 0 3, 结果为
4 3 2 1 5 6 7 8 9 0
前四个逆序
然后p 4 9
即4 ~9 也就是 5 6 7 8 9 0逆序,结果为 0 9 8 7 6 5
执行后a为
4 3 2 1 0 9 8 7 6 5
然后执行p 0 9 即从0到9逆序
结果为
5 6 7 8 9 0 1 2 3 4
结果为C
关于c语言指针函数fun和c语言指针函数传参的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息 , 记得收藏关注本站 。

    推荐阅读