c语言中每个变量的地址不相同,C语言变量 (Variables)与变量的地址.ppt

C语言变量 (Variables)与变量的地址

10.7 指向函数的指针____函数指针 1、函数指针的概念 函数在编译时被分配的入口地址,用函数名表示 指令1 指令2 指令n func 函数func所占内存单元 函数指针 2、函数指针变量 定义格式 函数类型 (*指针变量)( [形参类型1, 形参类型2,…, 形参类型n] ) 函数返回值的数据类型 专门存放函数入口地址 可指向返回值类型相同的不同函数 ( )不能省 int (*p)() 与 int *p()不同 例如:int (*p)(int, int); 则定义了一个可指向带两个int型的形参,其返回值int型的函数指针。 而int *p(int, int); 则表示是一个返回值为int型指针函数。 赋值 函数名代表该函数的入口地址。因此,可用函数名给指向函数的指针变量赋值。其赋值的一般格式为: 函数指针 = 函数名; 例: int max (int a, int b) { return (a > b? a : b); } int (*p)(int, int); //定义函数指针p p = max; 调用格式 函数指针变量([实参1, 实参2,…,实参n]); 或 (*函数指针变量)([实参1, 实参2,…,实参n]); 例: int max (int a, int b) { return (a > b? a : b); } int (*p)(int, int); //定义函数指针p p = max; p(2, 3); 或 (*p) (2, 3); //等价于max (2, 3) 【例】用函数指针数组来实现对一系列函数的调用。 #include int add (int a, int b); int sub (int a, int b); int max (int a, int b); int min (int a, int b); void main ( ) { int a, b, i, k; //定义指针数组,并对其赋初始值 int (*func[4]) (int, int) = {add, sub, max, min}; printf ("select operator(0-add,1-sub, 2-max,3-min): "); scanf ("%d", &i); printf ("intput number(a,b): "); scanf ("%d%d", &a, &b); //根据用户操作选择来执行不同的函数 k = func[i] (a, b); printf ("the result: %d\n", k); } int add (int a, int b) { return (a+b); } int sub (int a, int b) { return (a-b); } int max (int a, int b) { return (a > b? a : b); } int min (int a, int b) { return (a < b? a : b); } 运行结果: select operator(0-add,1-sub,2-max,3-min):0↙ intput number(a,b):2 3↙ the result:5 p为指针数组,由n个指针组成的数组。 命令行参数 GUI界面之前,计算机的操作界面都是字符式的命令行界面(DOS、UNIX、Linux) 通过命令行参数,使用户可以根据需要来决定我们的程序干什么、怎么干 main(int argc, char* argv[]) 当你把main函数写成这样时 argc的值为:参数的数目+1 argv[0]为指向命令名的字符指针 argv[x](x>1)为指向每个参数的字符指针 例题讲解 thanks * A pointer is a variable whose value is a memory address representing the location of the chunk of memory on either the run-time stack or on the heap. * 随着以Windows为代表的GUI的普及,命令行参数已经显得不那么重要了。但对计算机业内人员来说,它仍然是一个必修科目。它可以让你与程序更深入地交流 多级指针 定义:指向指针的指针 一级指针:指针变量中存放目标变量的地址

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值