函数指针2017/12/2C语言学习内容总结

来源:互联网 发布:php list each 编辑:程序博客网 时间:2024/05/16 06:33

1.下面一段代码:

#ifndef PI 3.1415926

#ifdef PI 3.1415926

endif;

//的作用是:防止头文件多次被引入。

2.代码不是试出来的,是想出来的。

3.#include<assert>//是断言的头文件。

4.int *ar[10];//是定义了一个存放整型变量指针的数组。

   int (*p)[10];//p是一个指向大小为10的整型数组的指针。

5.函数名有两个含义:(1)可以当做函数调用时使用。如:add();

                                   (2)可以表示函数的地址。如:add;

6.下面一段代码:

   int (*pfun)(int,int);//pfun是一个返回值为int形参为int、int的函数指针。

   int *pfun(int,int );//是声明了一个返回值为int*形参为int、int的函数。

7.下面一段代码:

#include<iostream>
using namespace std;
int my_add(int x, int y) { int z = x + y; return z; }
int my_sub(int x, int y) { int z = x - y; return z; }
int my_mul(int x, int y) { int z = x*y; return z; }
int my_div(int x, int y) { int z = x / y; return z; }
int main()
{
int x = 10;
int y = 20;
int(*pfun)(int, int) = my_add;
int(*pfun1[4])(int, int) = { my_add,my_sub,my_mul,my_div };
int z = pfun(x,y);
int z1 = (*pfun)(x, y);
int z2 = (*pfun1[0])(x,y);
cout<< x << "+" << y << "=" << z<<endl;
cout << x << "+" << y << "=" << z1 << endl;
cout << x << "+" << y << "=" << z2 << endl;
return 0;

}

//函数的调用方式有两种:(1)z=(*pfun)(x,y);//旧格式。

                                         (2)z=pfun(x,y);//新格式。

8.下面一段代码:
z=((int (*)(int,int ))(0x004100f))=100;//先将一个地址值强转为一个函数指针类型,然后对它进行取指向操作再进行赋值操作。

9.注意:函数指针也可以作为函数的形参使用。

10.对于下面的函数指针:

int (*)(int ,int )fun(int (*p)(int,int )){......}//是不能编译通过的。必须进行以下的声明:

int (*fun(int (*p)(int,int )))(int ,int ){......}

但是这种代码在看时不容易看懂。可以用以下的代码使这种表示变得清晰易懂:

typedef int (*PFUN)(int,int);

PFUN fun(PFUN p){........}