L8 :注释
简单直接,规范有用
L9 :接续符和转义符
1.接续符
\ :表示一行没有结束,下一行继续
适用范围:
宏代码块定义
#define SWAP(a,b) \
{ \
int temp = a; \
a = b; \
b = temp; \
}
2.转义符
L10 :单引号 双引号
#include <stdio.h>
int main()
{
char* p1 = 1 ;
char* p2 = '1';
char* p3 = "1";
printf("%s, %s, %s", p1, p2, p3);
printf('\n');
printf("\n");
return 0;
}
编译警告,执行出错,printf(“%s, %s, %s”, p1, p2, p3);这句出了问题。
- 单引号表示字符常量
- 双引号表示字符串常量
- ‘a’表示字符常量 ,占一个字节,’a’+1 =’b’
- “a”表示字符串常量,占2个字节,“a”+1表示指针运算,结果指向”a”结束符 ‘\0’
L11 : 逻辑运算符
1. && || !
&& 执行时 如果前一个结果为假,则表达式后面的不执行
|| 执行时 如果前一个结果为真,则表达式后面的不执行
2. 三目运算符
int a =3;
int b =1;
int c =1;
c=(a>b?a,b); // C=3
*(a>b?&a,&b) =4; //a =4;
L12:位运算符
防错准则:
- 避免位运算符,逻辑运算符和数学运算符出现在一个表达式中
- 当三者需要同时出现时,尽量使用()来表达计算次序。
交换两个变量 a,b 的三种方法:
#include <stdio.h>
#define SWAP1(a,b) \
{ \
int temp = a; \
a = b; \
b = temp; \
}
#define SWAP2(a,b) \
{ \
a = a + b; \
b = a - b; \
a = a - b; \
}
#define SWAP3(a,b) \
{ \
a = a ^ b; \
b = a ^ b; \
a = a ^ b; \
}
int main()
{
int a = 1;
int b = 2;
SWAP1(a,b);
SWAP2(a,b);
SWAP3(a,b);
return 0;
}
L13 :++ – 操作符
L14 :优先级和类型转换分析
易错优先级描述
c语言隐式类型转换