if (*str >= ‘a’ && *str <= ‘z’) {
//变为大写字母。小写和大写字母的ASCII值有个固定的差值
*str -= ‘a’ - ‘A’;
}
//遍历下一个字符
str++;
}
//返回字符串
return dest;
}
intmain()
{
//定义一个字符串变量
charstr[] =“lmj”;
//调用函数
char*dest =upper(str);
printf(”%s”, dest);
printf(”%s”, str);
return0;
}
指向函数的指针
定义的一般形式:函数的返回值类型(*指针变量名)(形式参数1,形式参数2, …);
注意:形式参数的变量名可以省略,甚至整个形式参数列表都可以省略
intsum(inta,intb)
{
returna + b;
}
int main()
{
int(*q) (inta,intb) =sum;// (int a, int b)可以写成(int a, int)或(int,int)或()
intresult = (*q)(2,5);//调用函数
printf(“\n%d”, result)
return 0;
}
将函数作为参数
voidget(int(*q)(inta,charb),floatc) {}
预处理指令
1.C语言在对源程序进行编译之前,会先对一些特殊的预处理指令作解释(比如之前使用的#include文件包含指令),
产生一个新的源程序(这个过程称为编译预处理),之后再进行通常的编译
2.为了区分预处理指令和一般的C语句,所有预处理指令都以符号”#“开头,并且结尾不用分号
3.预处理指令可以出现在程序的任何位置,它的作用范围是从它出现的位置到文件尾。
习惯上我们尽可能将预处理指令写在源程序开头,这种情况下,它的作用范围就是整个源程序文件
不带参数的宏定义
#define宏名字符串
比如#define ABC 10
右边的字符串也可以省略,比如#define ABC
它的作用是在编译预处理时,将源程序中所有”宏名”替换成右边的”字符串”,常用来定义常量
宏名的有效范围是从定义位置到文件结束。如果需要终止宏定义的作用域,可以用#undef ABC命令
宏名一般用大写字母,以便与变量名区别开来,但用小写也没有语法错误
定义一个宏时可以引用已经定义的宏名
#define R 3.0
#define PI 3.14
#define L 2*PI*R
带参数的宏定义
#define宏名(参数列表)字符串
在编译预处理时,将源程序中所有宏名替换成字符串,并且将字符串中的参数用宏名右边参数列表中的参数替换
#include <stdio.h>
#define average(a, b) (a+b)/2
int main ()
{
int a = average(10, 4); // 替换成 (10+4)/2
printf(“平均值:%d”, a);
return 0;
}
宏名和参数列表之间不能有空格,否则空格后面的所有字符串都作为替换的字符串
#define R (a) (a+5)
voidtest()
{
inta = R(5); //这时替换的结果是: int a = (a) (a+5)(5);
printf(”%d\n”, a);
}
带参数的宏在展开时,只作简单的字符和参数的替换,不进行任何计算操作。
所以在定义宏时,一般用一个小括号括住字符串的参数或结果
记住替换的原则是在预编译时
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-55787-7.html
第二天早上便领着儿子去看了