学习第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);
      

原文地址:https://www.cnblogs.com/chengyaohui/p/13672685.html