重庆大学《C语言程序设计》课件-第6章 指针与函数.ppt
第六章指针C语言程序设计重庆大学C程序设计技术第一章C程序设计初步第二章C程序的基本控制结构第三章函数第四章数组和字符串第五章C程序文件处理基础第六章指针第七章结构体和联合体数据类型第八章编译预处理基础第九章枚举类型和位运算第六章指针6.1指针与函数6.1.1返回指针值的函数6.1.2指向函数的指针变量6.2指针与一维数组6.3指针与二维数组6.4指针数组与命令行参数6.5使用指针构建动态数组6.6指针与字符串6.1.1返回指针值的函数1、返回指针值的函数函数返回值:整型、实型、字符型、空类型……;函数返回值:指针型数据(地址)。返回指针值的函数定义格式: [存储类别符]数据类型符*函数名(形式参数表及定义){函数体……} 例如函数定义时首部为float*fun(floatx,floaty)时,有:fun是函数名x,y函数形式参数函数名前的星号*表示函数fun是返回指针值的函数,返回值是指向实型数据的指针值。/*Name:ex06-01.cpp*/#includestdio.hlong*fac(longn);//函数的声明voidmain(){ longn,i,sum=0,*pi; printf(Inputn:); scanf(%ld,n); for(i=1;i=n;i++) { pi=fac(i);//函数的调用 sum=sum+*pi; } printf(SUM=%ld\n,sum);}long*fac(longn)//函数的定义{ staticlongp=1; p*=n; returnp;}例6-1计算累加量,要求使用静态局部变量和返回指针的函数方式进行处理。6.1.1返回指针值的函数#includestdio.hlong*fac(longn);//函数的声明voidmain(){ longn,i,sum=0,*pi; printf(Inputn:); scanf(%ld,n); for(i=1;i=n;i++) { pi=fac(i);//函数的调用 sum=sum+*pi; } printf(SUM=%ld\n,sum);}long*fac(longn)//函数的定义{ longj,p=1;//static for(j=1;j=n;j++)p*=j; returnp;}#includestdio.hvoidmain(){int*fun();intnum,*count;for(num=1234;num=1;num--) if(num%3==0) count=fun();printf(count=%d\n,*count);}int*fun(){inti;//返回自动局部变量的地址,程序有潜在错误//应该改为staticinti;i++;returni;} 例6-2统计[1,1234]中有多少个数能被3整除。6.1.1返回指针值的函数6.1.2指向函数的指针变量1.指向函数指针变量的定义2.指向函数的指针变量实现调用函数3.指向函数的指针变量作为函数参数1.指向函数指针变量的定义函数指针概念:函数入口地址或存储区域首地址,函数名表示。指向函数指针变量概念:存放函数指针(入口地址)的指针变量。指向函数指针变量定义格式:[存储类别符]数据类型名(*指针变量名)(形参表)存储类别符是指针变量本身的存储类型;数据类型是被指针变量指向函数的返回值类型;形参表则是被指针变量指向函数的形式参数表;指针变量的命名规则与普通变量相同例如函数:voidswap(intx,inty);指向这个函数指针变量:void(*fp)(intx,inty);2.指向函数指针变量的赋值和引用用指向函数的指针变量来调用函数的步骤:⑴.定义指向函数的指针变量;⑵.将被调用函数名/函数指针/函数入口地址,赋值给指向函数指针变量。例:函数原型为:voidswap(