函数指针&&命令行参数

C语言中比较高级的部分

函数指针:

程序运行期间,每个函数都会占用一段连续的内存空间。而函数名就是该函数所占内存区域的起始地址。

我们可以将函数的入口地址赋给一个指针变量,使该指针变量指向该函数。然后通过指针变量就可以调用这个函数。

这种指向函数的指针变量成为"函数指针"。

定义形式

类型名(* 指针变量名)(参数类型1,参数类型2,...)

int(*pf)(int ,char)

 1 #include<stdio.h>
 2 void PrintMin(int a, int b){
 3   if(a<b)
 4     printf("%d",a);
 5   else
 6     printf("%d",b);
 7 }
 8 int main(){
 9   void (*pf)(int, int);
10   int x=4, y=5;
11   pf = PrintMin;
12   pf(x, y);
13   return 0;  
14 }

函数指针和qsort库函数,函数指针有大用处

qsort可以对任意类型的数组进行排序。

void qsort(void *base, int nelem, unsigned int width, 
int(*pfCompare)(const void*, const void *));

对数组排序,需要知道:

1 数组起始地址

2 数组元素个数

3 每个元素大小

4 元素谁在前谁在后的规则

pfCompare: 指向比较函数的地址(函数指针)

#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;
}

命令行参数

cmd

notepad sample.txt

int main(int argc, char * argv[])

{

....

}

猜你喜欢

转载自www.cnblogs.com/focus-z/p/9307960.html