[工学]12周指针二.pptVIP

  • 1
  • 0
  • 约1.08万字
  • 约 68页
  • 2018-02-28 发布于浙江
  • 举报
[工学]12周指针二

例:求a,b中的最小者。 m = (*p)(a,b); m = min(a,b); void main() { int (*p)(int, int); int a,b,m; p = min; scanf(%d,%d,a,b); m = (*p)(a,b); printf(\na = %d,b = %d, min = %d\n,a,b,m); } int min(int x,int y) { int z; z = (xy? x:y); return(z); } * 3.用函数的指针作参数 可以用指向函数的指针变量作为被调用函数的参数; 由于指针变量是指向某一函数的,所以先后使指针指向不同的函数,就可以在被调函数中调用不同的函数。 * 例: 设一个函数 process,在调用它的时候, 每次实现不同的功能。 (1)求a和b之和。 (2)求a,b中大者。 (3)求a,b中小者。 分析: 函数名作实在参数; process的形参中,定义一个指向函数的指针。 * 主程序: void main() {int add(int,int),max(int,int), min(int,int); void process(int,int, int (*)(int,int)) ; int a,b; printf(please input a and b:\n); scanf(%d%d, a,b); printf(sum = ); process(a,b,add); printf(max = ); process(a,b,max); printf(min = ); process(a,b,min); } * 子程序: void process(int x,int y, int (*fun)()) { int result; result = (*fun)(x,y); printf(%d\n, result); } * add(int x, int y) { int z; z = x+y; return(z); } max(int x, int y) { int z; if (xy) z = x; else z = y; return(z); } * min(int x, int y) { int z; if(xy) z = x; else x = y; return(z); } * 说明 用指向函数的指针作函数参数的优越性在于能在调用一个函数过程中执行所指定的函数,从而增加处理问题的灵活性。 在处理不同函数时,process函数本身并未改变,而只是改变了调用它的实参。如果将另一个函数传给process,只需改变一个实参值即可。 * 第六节 指针数组 * 指针数组 一、指针数组的定义 二、指针数组的初始化 三、指针变量 * 1. 指针数组的定义 格式: 类型标识符 *数组名[常量表达式] 例: int *a[4]; 定义了一个有4个元素的一维数组; 数组的每个分量都是一个指向整型的指针; int *a[4]; 等同于 int *(a[4]); * 指针数组的定义 注意: [ ] 的运算优先级高于 *,如果写成 int (*a)[4]; 定义了一个行指针变量 a,指向有 4 个元素的一维数组。 * 2. 指针数组的初始化 指针数组的初始化就是在定义指针数组时给其数组元素赋值; 例: char *p[ ] = {Hello, Why,Thanks}; 指针数组的初值必须是地址; 注意! * P[0] P[1] P[2] H e l l o \0 W h y \0 T h a n k \0 s 图示: * 例:将若干字符串按字母顺序输出。 #includestdio.h #include string.h void main() { void sort(char *name[] , int n); void print(char *name[] ,int n); char *name[ ]={BASIC,FORTRAN,PASCAL,COBOL}; int n = 4; sort ( name , n ); print ( name , n ); } * void print(char *name[] ,int n) { int i; for( i = 0 ; i n ; i++) p

文档评论(0)

1亿VIP精品文档

相关文档