1.一个函数不写返回值时,默认返回int
func(int var){
var++;
return var;
}
int main(){
printf("func(1)=%d\n",func(1)); //func(1)=2
return 0;
}
2.逗号表达式:整个逗号表达式的最终结果是最后一个子表达式(表达式 n)的值
**例:**func((1,2),(3,4,5))即为func(5)
3.例题:将字符串转换为整数
int getNumber(char c){ // -1 {0~9}
int ret=-1;
if(('0'<=c)&&(c<='9')){
ret=c-'0'; // 字符转数字:利用ASCII码差值,比如'5'-'0'=5
}
return ret;
}
int strtoint(char str[]){
int ret=0;
int sign=0; //符号位
int i=0; //遍历字符串的索引
if(getNumber(str[0])!=-1){ //情况1:开头是数字(比如"123")
sign=1;
i=0; //从0号元素的位置开始处理
}
else if(str[0]=='+'){
sign=1;
i=1; //从1号元素的位置开始处理
}
else if(str[0]=='-'){
sign=-1;
i=1;
}
while(sign&&str[i]){ //sign≠0(有合法符号)且str[i]≠'\0'(未到字符串末尾)
int n=getNumber(str[i]);
if(n!=-1){ // {0~9}
ret=ret*10+n; // 123456 1 1*10+2=12 12*10+3 = 123
}
else //如果n为-1 遇到非数字,比如:1234abc 12 => 1234
break;
i++;
}
ret=sign*ret;
return ret;
}
int main(){
char str[] = "-123";
printf("strtoint(%s)=%d\n",str, strtoint(str));
return 0;
}
4.C语言中的宏定义(复制粘贴替换)
无参宏
#include <stdio.h>
// 无参宏:给数字100起别名MAX_NUM
#define MAX_NUM 100
// 无参宏:给字符串起别名HELLO
#define HELLO "Hello, Macro!" //真正意义上的常量
int main() {
// 预处理后:int a = 100;
int a = MAX_NUM;
// 预处理后:printf("Hello, Macro!\n");
printf(HELLO"\n");
// 预处理后:if (a < 100)
if (a < MAX_NUM) {
printf("a小于最大值\n");
} else {
printf("a等于最大值\n"); // 最终输出这行
}
return 0;
}
带参宏
#include <stdio.h>
// 带参宏:计算两个数的和
#define ADD(x, y) x + y
// 带参宏:
#define SQUARE(x) ((x) * (x))
int main() {
// 预处理后:int sum = 10 + 20; → sum=30
int sum = ADD(10, 20);
printf("sum = %d\n", sum);
// 预处理后:int good = ((10 + 20) * (10 + 20)); → good=900
int good = SQUARE(10 + 20);
printf("good = %d\n", good);
return 0;
}
5.编译器组成
(1)预处理:处理所有宏以及#开头的语句(复制粘贴替换)
(2)编译模块:将C程序翻译成二进制程序
(3)将二进制程序组合成可执行程序