C++_10_指针函数和函数指针
指针函数和函数指针
指针函数
类型标识符 *函数名(参数表) eg:int *f(x,y);
指针函数——1、首先他是一个“函数”,只不过一定有返回值,并且返回值为地址,需要用指针来接
2、由于返回值是地址,所以类型说明符一般都是int
3、函数名没有被括号束缚,这表示函数具有一定的独立性并且他首先必须满足函数的属性
函数指针
类型标识符 (*函数名)(参数表)
函数指针——1、首先他是一个“指针”,这里的函数名实际上应该是指针变量名,只不过为了便于区分指针函数,先这样写
2、指针的定义类型和指向函数的类型保持一致
· 3、函数名(指针变量名)被括号将其和*束缚在一起,突出这首先是一个指针
/** * 指针函数 * 类型标识符* 函数名(参数表) eg:int* f(x, y); * 指针函数——1、首先他是一个“函数”,只不过一定有返回值,并且返回值为地址,需要用指针来接 * 2、由于返回值是地址,所以类型说明符一般都是int * 3、函数名没有被括号束缚,这表示函数具有一定的独立性并且他首先必须满足函数的属性 * * 函数指针 * 类型标识符 ( * 函数名)(参数表) int(* f)(x, y); * 函数指针——1、首先他是一个“指针”,这里的函数名实际上应该是指针变量名,只不过为了便于区分指针函数,先这样写 * 2、指针的定义类型和指向函数的类型保持一致 * 3、函数名(指针变量名)被括号将其和 * 束缚在一起,突出这首先是一个指针 */ #include<iostream> using namespace std; char * zzhs(); //指针函数定义 char(*pr)(); //函数指针定义 char Ordinary_fun(); //定义一个普通的函数 int main() { //-----指针函数----------------------------------------------- char* pn = zzhs(); //指针函数调用 cout << "pn = " << pn << endl; //zhizhenhanshu cout << "*pn = " << *pn << endl; //*pn = z //-----函数指针----------------------------------------------- cout << "Ordinary_fun =" << Ordinary_fun << endl; //Ordinary_fun =00007FF6DEF21550 Ordinary_fun就是函数的调用入口地址 pr = Ordinary_fun; //pr就是函数指针,被赋值为一个普通函数的入口地址 (*pr)(); //函数指针调用 (*Pr)- 解引用出函数名,相当于写出 zzhs() return 0; } char * zzhs() { static char *p = (char*)malloc(sizeof(int)); static char b[20] = "zhizhenhanshu"; p = b; cout << "b = " << b << endl; //b = zhizhenhanshu cout << "&b = " << &b << endl; //&b = 00007FF69FFB6018 cout << "p = " << p << endl; //p = zhizhenhanshu cout << "&p = " << &p << endl; //&p = 00007FF69FFB61A8 return p; } char Ordinary_fun() //普通的函数 { char c[20] = "hanshuzhizhen"; cout << "c = " << c << endl; //c = hanshuzhizhen return 0; }

浙公网安备 33010602011771号