c语言函数接收指针 c语言接收函数返回值

C语言-函数指针

/*

成都创新互联公司专业为企业提供巩留网站建设、巩留做网站、巩留网站设计、巩留网站制作等企业网站建设、网页设计与制作、巩留企业网站模板建站服务,十余年巩留做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。

函数指针,关键是后面两个字“指针”,顾名思义,是一个指向函数的指针

原理:函数在创建好了后,函数的代码会在内存中占有个位置,这时我们创造一个指针来指向这个地址,这个指针就叫函数指针

函数指针不可以移动,想要移动指针的位置来指向函数的下一个指令的想法是错误的

函数指针的要求,

1,首先这个指针,要和函数的返回类型一样

2,指针的*和名字,要用小括号括起来//不括起来就是指针函数了,意思就变成,函数返回一个指针了

3,最右边的小括号里形参位置的类型,形参的个数,也要和函数定义时的形参一致,只要类型,不要形参名即可,

但是加上形参名也可以,没毛病,看上去也更清晰

*/

#include

void swapchar(char *a, char *b)

{

char t;

t = *a;

*a = *b;

*b = t;

}

void swapchar2(char * a2, char * b2)

{

printf("this is swapchar2");

}

int main(void)

{

char chf = 'a', chg = 'j';

void(*p)(char * a, char * b);//定义函数指针、形参名字a、b可有可无,但有的话看上去更清晰,只要函数定义的类型、参数类型、以及参数个数,与这个指针一致,那么这个指针p,就可以指向它

p = swapchar;//p指针接管swapchar函数,只要给函数名字,就可以给过去了

printf("chf=%c,chg=%c ", chf, chg);

p(chf, chg);

printf("chf=%c,chg=%c ", chf, chg);

p = swapchar2;//这里把swapchar2函数的地址,给了p,这时p从swapchar地址,转移到了swapchar2这里。

p(chf,chg);

return 0;

}

在C语言中,指向函数的指针怎么调用函数?

1楼感觉对函数指针不是很了解,就不评论了. 2楼的基本还可以,但是int (*p)(),然后让它指向max函数,一个包含两个未知量的函数,这在后来的标准c里面是不支持的好像. 3楼吧,那么多*,感觉有点不大对. *是取内容,连着那么* ,我没试过,没有多少意义至少.他11级了,应该也不会怎么有错,你可以试试(我不打算加那么多*, 就不调试了).

程序里面对函数的调用,就是通过函数的入口地址,然转入函数. 这样的话,函数指针的意义就明显了.函数指针指向了函数的入口,即函数指针里是函数的入口地址. 指针不能指向函数这种说法肯定是不对的.话说回来,1楼的老兄可能看错书了,或者记错了.

类型匹配很重要,二楼的声明和使用不一致,这在老版的编译器里也是支持的.那时候ANSI标准还没有制定出来.现在而言,这种定义应该不被支持了才是.

那个声明应该如下:

int (*p)(int , int);

这样才能指向

int name(int,int)型的函数.么有实验过,但按这种写法是不错的肯定.

三楼那个********p,怎么都觉得不对.

c语言指针问题?

C语言的大多语法都是简单易懂的,这常常会给初学者一种“别人都说C语言难,我看也不过如此”的感觉。但是这种感觉常常会停止在初学者学到指针时,这是一些读者跟我说的。

鉴于很多C语言初学者都觉得指针非常难,

小明定义了一个C语言函数 int f(int * ),为什么 f(5) 不能正常工作呢?

如果希望传递 5 给函数 f(),在C99中,可以使用下面这种方法:

f( (int[]){5} );

上面这行C语言代码相当于定义了一个数组,并且数组只有一个元素 5,函数 f() 接收到的参数是该数组,只不过这一过程中的数组名没有“显示”。

抛开C99的这个特性,C语言调用 f(5) 就不能这么写了,而是需要借助变量:

int five = 5;

f(five);

在C语言中,接受某个值指针的函数是有可能通过该指针修改该值的(即使程序员无此打算,C语言还是会一直这么认为),因此只有变量才能胜任。在C语言中,常数是只读的,只能作为右值, 运算符是不能处理常数 5 的,f(five) 会引发编译错误。

f(five) 会引发编译错误

表达式 * p++ 增加了 p 指向的数值,还是指针 p 本身?

C语言中的 ++ 和 — 运算符的优先级高于 * 运算符,所以 *p++ 其实就相当于 *(p++)。显然,++ 运算符增加的是指针 p 本身的值,不过在指针 p 自增之前,*p++会先返回 p 指向的值。如果希望 ++ 运算符增加 p 指向的值,应该使用括号运算符:(*p)++。

小明想使用指针操作数组里的数值,下面这段C语言代码有什么问题?

小明预计程序会输出 3,但是程序却输出了“垃圾值”,他的C语言代码如下,请看:

int array[5], i, *ip;

for(i = 0; i 5; i++)

array[i] = i;

ip = array;

printf("%d\n", *(ip + 3 * sizeof(int)));

C语言 函数指针

加个注释吧:

/*

函数x

参数1: 类型 int 未标注形参

参数2: 类型 void(*)(int) 形参y

返回值: 类型 void(*)(int)

*/

void(*x(int,void(*y)(int)))(int);

其中 “void(*)(int)" 代表接收一个int参数返回类型为void的函数指针类型,比如:

void foo(int i)

{

printf("%d", i);

}

所以你可以这样调用它:

...

void (*pf)(int);

int i = 0;

pf = x(i, foo);

...


网页名称:c语言函数接收指针 c语言接收函数返回值
标题路径:http://pwwzsj.com/article/ddejcjc.html