
正文
c语言_函数的指针 c语言函数指针是什么
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
c语言函数指针的作用。
C语言中函数指针与普通指针没什么差别c语言_函数的指针,只是指向c语言_函数的指针的内容不同而已。主要作用c语言_函数的指针:
1、实现面向对象编程中的多态性。
2、回调函数。
函数指针是指向函数的指针变量。因此“函数指针”本身首先应是指针变量c语言_函数的指针,只不过该指针变量指向函数。这正如用指针变量可指向整型变量、字符型、数组一样,这里是指向函数。
C在编译时,每一个函数都有一个入口地址,该入口地址就是函数指针所指向的地址。有了指向函数的指针变量后,可用该指针变量调用函数,就如同用指针变量可引用其c语言_函数的指针他类型变量一样,在这些概念上是大体一致的。
函数指针有两个用途:调用函数和做函数的参数。
相关问答
Q1: 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;
}
Q2: C语言函数指针怎么用?
有函数: int fun(int a,int b);\x0d\x0a要定义指向该函数c语言_函数的指针的指针\x0d\x0a对比指向 int a; 的指针\x0d\x0aint *p; p = a;\x0d\x0ap的定义是怎么来的c语言_函数的指针?\x0d\x0a首先要保证p是一个指针类型\x0d\x0a写下(*p)c语言_函数的指针,\x0d\x0a然后c语言_函数的指针,考虑下p的基类型,\x0d\x0ap的基类型就是变量a的类型int\x0d\x0a将int 放在(*p)前面就行了\x0d\x0aint (*p); \x0d\x0a括号可以省略,就成了 int *p;\x0d\x0a\x0d\x0a同理\x0d\x0a想要实现 pf = fun;\x0d\x0a(*pf) 将pf定义为一个指针,\x0d\x0a将fun的类型作为pf的基类型\x0d\x0afun相当于一个 int (int a,int b)类型的量\x0d\x0aint (int a,int b) (*pf);\x0d\x0a基类型中有圆括号和中括号要后移\x0d\x0aint (*pf)(int a,int b) ;//括号不能省略\x0d\x0apf = fun;\x0d\x0a调用时\x0d\x0a(*pf)(3,4); pf(3,4)都可以
Q3: C语言函数指针
供参考:
//:
strcpyDemo.c
//author:
Problue
#include
stdio.h
#include
assert.h
/**
*
该函数将从src指向c语言_函数的指针的数组中复制最多count个字符(不复制空字符后面c语言_函数的指针的)到dest指向的数组中。
*
如果复制发生在两个重叠的对象中c语言_函数的指针,则行为未定义。
*
如果src指向的数组是一个长度比count短的字符串,则在dest指向的数组
*
后面添加空字符.直到写入了count个字符。
*@param
dest
目标数组
*@param
src
源数组
*@return
dest
*
*/
char*
strcopy(char*
dest,
const
char*
src,
int
count)
{
char*
sc
=
dest;
assert
((dest
!=
NULL)
(src
!=
NULL));
while
(
count
*src
!=
'\0')//
复制字符
[max
count]
src
到
dest
[count]
{
*sc++
=
*src++;
--count;
}
for
(;
count;
--count)
//
写入空字符到dest
{
*sc
=
'\0';
}
return
dest;
}
typedef
char*
(*STR_FUNC)(char*,
const
char*,
int);
int
main()
{
STR_FUNC
func
=
strcopy;
const
int
A_LENGTH
=
30;
char
a[A_LENGTH
+
1];//
=
"abc";
char*
b
=
"defg";
func(a,
b,
A_LENGTH);
puts(a);
puts(b);
getchar();
return
0;
}
c语言_函数的指针的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于c语言函数指针是什么、c语言_函数的指针的信息别忘了在本站进行查找喔。






