第一周 从C走进C++ 001 函数指针

 

1. 基本概念:

  程序运行期间,每个函数都会占用一段连续的内存空间。而函数名就是该函数所占内存区域的起始地址(也称“入口地址”)。我们可以将函数的入口地址赋给一个指针变量,使该指针变量指向该函数。然后通过指针变量就可以调用这个函数。这种指向函数的指针变量称为“函数指针”。

                                  

 

2. 定义形式
  类型名 (* 指针变量名)(参数类型1, 参数类型2,…);

  例如:
    int (*pf)(int ,char);
表示pf是一个函数指针,它所指向的函数,返回值类型应是int,该函数应有两个参数,第一个是int 类型,第二个是char类型。

3. 使用方法
  可以用一个原型匹配的函数的名字给一个函数指针赋值。
  要通过函数指针调用它所指向的函数,写法为:
    函数指针名(实参表);

#include <stdio.h> 
void PrintMin(int a,int b)  { 
  if( a<b ) 
      printf("%d",a); 
  else 
      printf("%d",b); 
} 
int main() { 
    void (* pf)(int ,int); 
    int x = 4, y = 5;     
    pf = PrintMin;    
    pf(x,y);   
    return 0; 
} 

4. 函数指针和qsort库函数
  C语言快速排序库函数:
    void qsort(void *base, int nelem, unsigned int width, int ( * pfCompare)( const void *, const void *));
可以对任意类型的数组进行排序。

                

  实例:

    下面的程序,功能是调用qsort库函数,将一个unsigned int数组按照个位数从小到大进行排序。比如 8,23,15三个数,按个位数从小到大排序,就应该是 23,15,8 。

 

#include <stdio.h> 
#include <stdlib.h> 
int MyCompare( const void * elem1, const void * elem2 ) 
{ 
  unsigned int * p1, * p2; 
  p1 = (unsigned int *) elem1; 
  p2 = (unsigned int *) elem2; 
  return  (* p1 % 10)  - (* p2 % 10 );  
} 
#define NUM 5 
int main()    
{ 
  unsigned int an[NUM] = { 8,123,11,10,4 }; 
  qsort( an,NUM,sizeof(unsigned int), MyCompare);   
  for( int i = 0;i < NUM; i ++ ) 
    printf("%d ",an[i]); 
  return 0; 
} 

 

 

 

 

第一周 从C走进C++ 001 函数指针,古老的榕树,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。