zoukankan      html  css  js  c++  java
  • 学习第26天

    C语言

    1. 函数指针变量调用函数、

      1. 函数在编译时系统会给函数分配一个入口地址、也称为 函数的指针(地址)、

      2. 有地址便可定义一个指针变量指向该函数、然后可以通过指针变量调用该函数、

      3. 函数在执行时会占用一段内存单元、有一个起始地址、有地址就可以用一个指针变量指向一个函数、从而通过指针变量调用、

      4. 函数名代表函数的的入口地址、

      5. 函数指针不能指向函数中间的某一条语句、

      6. 函数指针变量定义——数据类型标识符(*指针变量名)(形参列表);

      7. 数据类型标识符=函数的返回类型、

      8. 可以通过函数指针指向不同的函数、来调用不同的函数、

      9. 函数调用不仅可以通过函数名调用也可以使用函数指针调用、指向函数的指针不能做运算、

      10. int	max(int a, int b)
        {
        	if (a > b)
        		return a;
        	return b;
        	
        }
        int main()
        {
        	int c;
        	int (*e)(int a, int b);//定义函数指针变量、
        	/*注意!!!
        	int *e(int a, int b);这样就成函数声明、括号优先级高、所以变成int* 变成了函数的返回值类型、
        	可以写成int (*e)(int , int );只保留类型、*/
        	e = max;//将函数入口地址赋值给e、e和max的地址是不相同的、max不是真正的函数地址、
        	c =(*e)(19,39);//e地址是真正的函数地址、但打印地址、时、打印的时c的地址、
        	//c = max(9, 18);//常规函数调用、
        	printf("c=%d
        ", c);
        }
        
    2. 把指向函数的指针变量作为函数参数、

      1. int	max1(int a, int b)
        {
        	if (a > b)
        		return a;
        	return b;
        	
        }
        int max2( int a,
        	int b,
        	int(*c)(int a, int b)//形参就是函数指针、
        )
        	{
        	int d = c(a, b);//调用、函数指针c所指向的函数、
        	return d;
        	}
        
        int main()
        {
        
        	int e;
        	e = max2(30, 29,max1);
        	printf("e=%d
        ", e);
        
        	int (*f)(int, int);//定义函数指针变量
        	f = max1;
        	e = max2(3, 59, max1);
        	printf("e=%d
        ", e);
        }
        
    3. 返回指针值的函数、

      1. int d;//解决5行出现的问题、定义全局变量、这样内存就不会被释放、可以一直使用、
        int* a(int b, int c)
        {
        	int  d = b + c;
        	return &d;//!!!有风险、因为d在a函数调用完后会将d的的内存释放、所以、会出现错误、
        }
        
        int main()
        {
        
        	int *e;
        	e = a(4, 8);
        	printf("合是%d
        ",*e);
        

  • 相关阅读:
    三大主流负载均衡软件对比(LVS+Nginx+HAproxy)
    nginx 提示the "ssl" directive is deprecated, use the "listen ... ssl" directive instead
    centos安装nginx并配置SSL证书
    hadoop创建目录文件失败
    The server time zone value 'EDT' is unrecognized or represents more than one time zone.
    脚本启动SpringBoot(jar)
    centos做免密登录
    数据库远程连接配置
    Bash 快捷键
    TCP三次握手四次断开
  • 原文地址:https://www.cnblogs.com/chengyaohui/p/13672685.html
Copyright © 2011-2022 走看看