C语言基础 指针函数与函数指针

指针函数

        

         指针函数 : 返回值为指针的函数

         局部变量的地址不可以作为函数返回值 , 因为局部变量在函数结束时候已经被系统回收了

        

         char *words()

         {       

                  return “today is good day!\n”;

         }

 

         char *words2()  //错误示范(局部变量)

         {

                  char words[] = “today is good day!\n”;

                  return words;

         }

 

         char *words3()

         {

         // 申请堆中一块内存

         int len = 20;

         char *word = alloc(20,sizeof(char));

         strcpy(word ,“today is good day!\n”;len -1);

         return word;

         }

 

         // 当堆中一块内存没有指针指向它的时候 , 那么这一块内存就永远得不到释放

         在堆中的内存没有释放之前必须有一个指针指向这一块内存       

         int main()

         {

         char *w = word();

         printf(“%s”,w);

         }

----------------------------------------------------------------------------------------------------------------

 函数指针

         指向函数的指针

         函数指针定义格式: 指针所指向函数的返回值类型 (*函数指针名称) (指针所指向的函数的形参列表)

 

         写一个函数指针的步骤:

         1.拷贝索要指向的函数

         2.在函数名称使用小括号括起来

         3.在函数名称前面加*

         4.修改函数名为指针名称

 

函数指针的指向是可以改变的 , 但必须指向同类型的函数

同类型的函数 : 返回值类型与形参雷彪都相同函数

 

         void test()

         {

                  printf(“空参数返回值函数\n”);

         }

 

         int main( ){

         // test后面的括号是指向test所指向的代码

         //test本身是一个指针

         test();

         printf(“%p\n”,test);

         }

 

         void (*mothedP)( );

         mothedP = test;

         //第一种调用方式

         mothedP = test;

         //第二种调用方式 

         mothedP( );

 

 

         int sum(int sum1 , int sum2)

         {

                  return num1 +num2;

         }

 

         int minus(int num1,int num2)

         {

                  return num1 - num2;

         }

 

         int main()

         {

                  int (*sumPointer)(int num1,int num2);

                  sumPointer = sum;

 

                  int  rs = sumPointer(10,20);

                  printf(“rs=%d\n”,rs);

                 

                  pointer =minus;

                  rs = pointer(10,20);

                  printf("rs=%d\n",rs)

         }

 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值