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){........}