当前位置:
文档之家› 北京大学计算概论课件2016lesson11-bit-fp
北京大学计算概论课件2016lesson11-bit-fp
void main(int argc, char *argv[]) {
char buffer[80];
void (*pf)(char s1[],char s2[],char s3[]); if (argc!=3) error = 1; else{
if (!strcmp(argv[0],"add"))
声明函数指针的格式: 类型 (* 指针变量名)(参数列表);
例如: int (*fp) (int i,intj);
声名了一个函数指针。该函数指针可以指向带两个整数 变量且返回一个整数值的函数。
int add(int a,intb) {
return(a+b); }
fp = add;
//fp指向add函数
将编译链接后的可执行程序拷贝到一个目录中, 通过命令行方式启动运行并输入不同的参数
利用字符串处理函数获得所需要的参数内容
例子1.2 通过sscanf()来得到所需要的数字内容
#include < stdio.h >
void main(int argc, char *argv[]) {
float ave=0,temp; for ( int i=1; i < argc; i++ ) // start from the second para {
void main(int num, char *arglist[]) {
int i,j,len,arg[10]; for (i=1;i<num;i++) //从第二个参数开始 {
// 检查字符串中有没有不是数字的字符出现。这里没有处理负数 len=strlen(arglist[i]); for ( int j=0; j < len; j++ ){
sscanf(argv[i],"%f",&temp); ave += temp; } printf("The average is:%f",ave/(float)(i-1)); }
具体运行情况如下:
使用字符串检验、转换函数
int atoi( const char *string ); 将一个连续的数字串转换为 整数。
pf=add; else if (!strcmp(argv[0],"addc"))
pf = addc; else e指向add //指向addc
if (!error){ pf(argv[1], argv[2], buffer); printf("result is:%s\n", buffer);
i = atoi(st1);
//这里需要先对输入参数进行检查
j = atoi(st2);
sprintf(str,"%d",i+j);
}
void addc (char st1[],char st2[],char str[]) {
strcpy(str,st1); strcat(str,st2); }
#include < stdio.h > #include < stdlib.h > #include <string.h> void add (char st1[],char st2[],char str[]); void addc (char st1[],char st2[],char str[]); int error = 0;
printf("parameter[%d]:%d\n", j, arg[j]); } }
第二部分 函数指针
函数指针顾名思义就是指向函数的指针。 以同类型函数的地址作为值,可以通过间 接访问运算来访问所指向的函数。
函数指针的声明
在开始函数指针生命之前首先要了解一下函数的类 型。
函数的声明包含: 类型 函数名(参数表);三个部分组成
double atof( const char *string ); 将一个连续的数字串转 换为双精度浮点数。
为了避免使用时碰到错误输入的其他字符的干扰,应当先 对输入的字符串进行检查,也确认是连续的数字串
#include < stdio.h > #include < stdlib.h > #include < string.h >
参数 argc-1 \0
例子1.1 直接打印所有命令行参数
#include < stdio.h >
void main(int argc, char *argv[]) {
for ( int i=0; i < argc; i++ ) {
printf("parameter[%d]:%s\n",i,argv[i]); } }
if ( arglist[i][j] < '0' || arglist[i][j] > '9' ){
printf("error input"); num=0; break;
} } arg[i-1] = atoi(arglist[i]); } if (num){ printf("I get %d numbers\n",i-1); for (j=0;j<i-1;j++)
函数指针的引用格式:
int i=(*fp)(para1,para2 ); //实际调用fp指向的函数
也可以简化为:
int i= fp(para1,para2 );
通过命令行参数来控制程序的执行
void add (char st1[],char st2[],char str[])
{
int i,j;
命令行参数、函数 指针、位运算、宏
Hu Junfeng 2016/10/26
第一部分 命令行参数
主函数一般同时接受一对参数: int argc, char* argv[]
argv[0] argv[1] argv[2] argv[3]
…… argv[argc-1]
程序名 参数1\0 参数2\0 参数3\0
} else
printf("error code:%d", error); }
The preprocessor
overview macros file inclusion conditional compilation
15
Preprocessor Overview
performs:
macro substitution conditional compilation inclusion of named files