指针函数和函数指针

1.指针(型)函数

指针函数概念:

  本质上还是个函数,因其返回值是一个指针而得名。

  在C语言中允许一个函数的返回值是一 个指针(即地址),这种返回指针值的函数称为指针型函数

指针函数的定义和使用:

  • 格式:
    类型说明符 *函数名(形参表) {
      /*函数体*/
    }
    其中函数名之前加了“*”号表明这是一个指针型函数,即返回值是一个指针。类型说明符表示了 返回的指针值所指向的数据类型。
#include <stdio.h>
char *func(char str[]);
char *function(char *p);

int main(int argc, const char * argv[]) {
    /*
     返回指针的函数
     */
    char cs[] = "VSVSVSVSVS";
    char *str = func(cs);

    printf("%s\n",str);

    char *str2 = function(cs);
    printf("%s\n",str2);
    return 0;
}

// 定义一个返回指针的函数
char *func(char str[]) // 传数组
{
    str[0] = ‘!‘;
    return str;
}

char *function(char *p) // 传指针
{
    p[0] = ‘@‘;
    return p;
}

2.函数(型)指针(重点)

函数指针:

  本质上是一个指针,因该指针指向的是一个函数而得名。

为什么指针可以指向一个函数?

  函数作为一段程序,在内存中也要占据部分存储空间,它也有一个起始地址,即函数的入口地址。函数有自己的地址,那就好办了,我们的指针变量就是用来存储地址的。因此,可以利用一个指针指向一个函数。其中,函数名就代表着函数的地址。

函数指针的定义和使用:

格式:

函数的返回值类型 (*指针变量名)(形参1, 形参2, ...);
  • 其中“类型说明符”表示被指函数的返回值的类型。
  • “( 指针变量名)”表示“”后面的变量是定义的指针变量。
  • 最后的空括号表示指针变量所指的是一个函数。
// 无参数,无返回值的函数型指针

#include <stdio.h>
void func();

int main(int argc, const char * argv[]) {

    void (*funcP)(); // 定义指向函数的指针
    funcP = func; // 初始化 指向函数的 指针
    func(); // 方法一:函数调用
    (*funcP)(); // 方法二: 利用指针调用函数
    funcP(); // 方法三: 利用指针调用函数

}

void func()
{
    printf("我被执行了!");
}
// 有参数,无返回值的函数型指针

#include <stdio.h>
void sum(int v1,int v2);

int main(int argc, const char * argv[]) {

    void (*sumP)(int,int); // 定义一个指向函数的指针
    sumP = sum; // 初始化函数指针
    sumP(10,20); // 利用函数指针调用函数
    (*sumP)(20,30); // 利用函数指针调用函数
    // *sumP(20,30); // 错误写法,因为()的优先级高于*

}

void sum(int v1,int v2)
{
    printf("sum = %d\n",v1 + v2);
}
// 无参数,有返回值的函数型指针

#include <stdio.h>
int getAge();

int main(int argc, const char * argv[]) {

    int (*getAgeP)();
    getAgeP = getAge;

    int age1 = getAgeP();  // 利用函数指针调用函数
    int age2 = (*getAgeP)(); // 利用函数指针调用函数

    printf("%d,%d",age1,age2);

}

int getAge()
{
    return 26;
}
// 有参数,有返回值的函数型指针

#include <stdio.h>
int minus(int, int);

int main(int argc, const char * argv[]) {

    int (*minusP)(int,int); // 定义一个指向函数的指针
    minusP = minus; // 初始化函数指针

    int res = (*minusP)(20,1); // 利用函数指针调用函数
    int result = minusP(90,9); // 利用函数指针调用函数
    printf("res = %d,result = %d\n",res,result);
}

int minus(int val1, int val2)
{
    return val1 - val2;
}
时间: 2024-10-06 06:17:38

指针函数和函数指针的相关文章

c指针 --笔记2返回指针值的函数

返回指针值的函数 一般带回指针值的函数,定义形式为: int *a (int x, int y); 看这个经典案例: #include <stdio.h> int main(int argc, char const *argv[]) { double score[][4] = {{60.0, 70.0, 80.5, 20.1}, {60.0, 70.0, 80.5, 21.1}, {60.0, 70.0, 80.5, 22.1}}; double *search(double(*pointer

深入浅出剖析C语言函数指针与回调函数(二)

上一篇博文的地址: http://blog.csdn.net/morixinguan/article/details/65494239 这节,我们来看看函数指针与回调函数在Linux内核中的应用. 从上节我们了解到,函数指针和回调函数在开发者和用户之间的一个例子,那么这节,我将引用Linux内核中文件操作结构体来详细的说明. 我们首先来看到这个结构体,这段代码位于linux内核的include/linux/fs.h中,由于代码众多,我只截取几个最基本的例子: File_operations文件操

C语言函数、函数指针解析

函数.函数指针的理解: 函数的定义: void myfunc(void) { } 函数的声明 void myfunc(void); 函数指针的定义.初始化.赋值: 定义:void (*funcp)(void); 初始化: void (*funcp)(void) = &myfunc; 赋值 void (*funcp)(void); funcp = &myfunc; 函数调用:(*funcp)(); funcp(); 也可以这样赋值:void (*funcp)(void); funcp = m

数组指针、指针数组、函数指针、指针函数 -----笔记

1.数组的四种访问方式 定义数组 a[]; 指针 *p 指向数组a; (1) 利用数组的下表进行访问 a[i]; (2) 数组名+地址的偏移量i *(a+i) (3) 利用指针 p 进行下表访问 p[i] (4) 指针p + 地址的偏移量i *(p+i) 一维数组数组名:相当于一个单指针 2. 数组指针(指针)     指针数组(数组) 函数指针(指针)     指针函数(函数)    -------->只看后边两个字就能够区分是指针还是数组或函数 _______________________

【转】 指针函数与函数指针的区别

一. 在学习arm过程中发现这“指针函数”与“函数指针”容易搞错,所以今天,我自己想一次把它搞清楚,找了一些资料,首先它们之间的定义: 1.指针函数是指带指针的函数,即本质是一个函数.函数返回类型是某一类型的指针 类型标识符    *函数名(参数表) int *f(x,y); 首先它是一个函数,只不过这个函数的返回值是一个地址值.函数返回值必须用同类型的指针变量来接受,也就是说,指针函数一定有函数返回值,而且,在主调函数中,函数返回值必须赋给同类型的指针变量. 表示: float *fun();

C言语指针变量作为函数参数

在C言语中,函数的参数不只可所以整数.小数.字符等详细的数据,还可所以指向它们的指针.用指针变量作函数参数可以将函数内部的地址传递到函数外部,使得在函数外部可以操作函数内部的数据,而且这些数据不会跟着函数的完毕而被烧毁.像数组.字符串.静态分派的内存等多是一系列数据的聚集,没有方法经过一个参数全体传入函数外部,只能传递它们的指针,在函数外部经过指针来影响这些数据聚集.有的时分,关于整数.小数.字符等根本类型数据的操作也必需要借助指针,一个典型的例子就是交流两个变量的值.有些初学者能够会运用下面的

函数指针与回调函数

一.函数指针 1.  函数指针就是一个指针变量,用来指向函数地址.正在运行的程序(进程)在内存中占据一定的空间.进程包括编译好的程序代码和需要使用的变量.因此,程序代码中的函数就是一些字符域,要得到一个函数地址,也就是得到这些字符域的起始地址. 2. 函数指针的三种形式:    指向普通C函数的函数指针 --- C语言中的函数指针    指向C++类静态成员函数的函数指针 --- C++    指向C++类非静态成员函数的函数指针 --- C++ 函数指针的本质自然也就是函数地址.  类成员函数

指针函数与函数指针

指针函数与函数指针:函数名之前的指针×是不是被括号包含,如果被包含就是函数指针,反之则是指针函数. 1.指针函数是指带指针的函数,即本质是一个函数,函数返回时某一个类型的指针 类型符 *函数名(参数名) 指针函数的返回值是一个地址值,指针函数一定有函数返回值,而至在主调函数中函数返回值必须赋值给同类型的指针变量: float *fun(); float *p = fun(); 2.函数指针是指向函数的指针变量,即本质是一个指针变量 int (*f)(int x) f =func; 指向函数的指针

函数指针和回调函数

函数指针 函数指针是指向函数调用地址的指针.它和函数名究竟有什么关系呢?且看下文. 且看一小程序 首先,先请看下边程序: 1 #include <iostream> 2 #include <string> 3 using namespace std; 4 5 void func(string s) 6 { 7 cout << s << endl; 8 } 9 10 void (*pFunc)(string s); // 不能够写成 void *pFunc(s

了解指针(5)-- 指针和函数

就像数组名是指向数组的第一个元素的常指针一样,函数名也是指向函数的常指针.可以声明一个指向函数的指针变量,并且用这个指针调用其他函数(只要这个函数和你的函数指针在签名.返回.参数值方面一致即可). 例1: long  (* fun) (int) 上面就是一个函数指针,该指针返回值类型是long,所带的参数类型是int. 例2: int fun(char *,int); int (*pfun)(char *,int); pfun=fun; int a=(*pfun)("abcdefg",