1.局部变量 优先于 全局变量,但在函数里没定义该局部变量情况下,调用全局变量
注意for(i = 0; i < 10; i++)中并没有实现创建局部变量的功能,要注意观察i是否有创建,是否调用的
的是全局变量i
(main函数也是函数,和其他函数平行)
2.转义字符(算作一个字符):八进制:\ddd 或 \dd 或 \d
十六进制:\xh 或 \xhh,都会被转为ASCII码值,数字再多也没有意义,所以最多2个,
八进制最多3个也同理
3.含三目运算符的表达式的结果的值是实际所执行的语句的值
4.含++,--的表达式的值取决于++或--的位置,前置则先执行++,--操作,再返回值;后置则先返
回值,再执行++,--操作
5.对于数组arr,arr, &arr[0], &arr得到的值相同,只有sizeof(arr) 和 &arr这时arr表示整个数组
&arr取出的是整个数组的地址,需要用数组指针(注意:数组指针不是int**,而是int(*)[10])来接
收,但指针的值是第一个元素的地址
6.const修饰指针要看与*的相对位置,在*左边则不能解引用,右边则不能改变指针指向的对象
7.由于double类型的数据都有一定误差,所以要判断double变量和另一个值的关系,用减法,将
这个变量和要比较的值相减,然后自己定一个误差,小于该误差就近似相等。如使用a - 0.0 <=
0.00001而不用a == 0.0
8.arr除sizeof和&以外单独出现时都表示首元素地址,arr作为数组首元素地址时是常量不能修改。
所以char arr[10]; arr = "Hello";相当于改变了arr所代表的地址,不可行。而arr[0]改变的是该地址
下的值,并没有改变arr指向的地址,所以这个操作可行
9.switch 语句中case如果没有break, 进入case后会把后面所有语句都执行了
10.一个字母大写转小写+32,小写转大写-32
11.printf返回值是打印的字符个数
12. || 运算和 && 运算有短路情况,这里很容易出错,如果 || 前语句为真, || 后的语句不会执行;
&&前面的语句为假,&&后面的语句就不会执行
13.一个函数如果没有写返回类型,则会默认返回int,但不要这么写代码
14.函数(包括主函数)都是平行关系,因此只要不在同一个函数,变量之间不互相冲突,就算变
量名相同。所以要注意不同变量的作用域,生命周期,特别注意全局变量地位低于局部变量
15.给数组进行初始化时只能用地址,char arr[10] = "Hello"中的"Hello"返回值是首元素'H'的地
址,而char arr[10] = 'H'不可行,因为'H'表达式的值是H的ASCII码值而不是地址
16.逗号表达式执行顺序是从左到右,最右侧的表达式是整个逗号表达式的值,如果逗号表达式和
其它表达式复合起来,要注意它们之间的关系,例如 (a = 2 + 2, a * 5, a + 10), 4 + 5的结果是9,a
== 4,而a = (2 + 2, a * 5, a + 10, 4 + 5) 表达式的值是9, a == 9
17. x = x & (x - 1)每执行一次,x最低位的1就会变成0,可以通过这个表达式来计算x的二进制形式
有多少1;
x = x | (x + 1)每执行一次,x最低位的0就会变成1, 同理可计算x的二进制形式有多少0
18.有符号数右移时高位补符号位,左移补0,这也叫算术移位。还有一种逻辑移位,不过并不常
见,即左右移空位都补0
19.只有单目运算符、条件运算符(三目操作符)、赋值运算符的计算顺序是从右到左,其余的都
是从左到右
20.在进行运算时,如果操作数的数据类型不同,会出现类型提升。其中不同数据类型的等级大小
是char < int < long < long long < float < double,类型提升时有符号的高位补符号位,无符号数高
位补0
21.如果无符号类型和有符号类型同时出现在赋值、比较相关表达式中时,有符号类型会隐式转换
为无符号类型,因此不存在负数的情况
22.sizeof作为一个单目运算符而非函数,其内部的任何表达式都不会执行,仅仅是用于计算出相
关变量所占的空间大小
23.在一个复合的表达式中如果出现多个操作符,按规则将局部的表达式的返回值替换该表达式用
于简化,也可防止在解读代码时先入为主,如 1 <= a <= 9,需要拆分为 1 <= a,再将这个表达式
的返回值代替该表达式,即 ret <= 9,再进行判断
24.指针之间不能进行相加操作,相减得到两个地址之间的元素个数,但这之间的元素都要来源于
程序开辟
25.大端和小端存储只是存储方式不同(由硬件决定),存储的内容提取后不变,但通过联合体可
以区分,与利用联合体判断大小端的原理相同
26.字符常量最少1位,最多4位,当位数多余1位时,编译器会直接将这几个字符的二进制数字连接
起来组成一个很大数字,并且字符常量的值是int,每个字符的二进制形式会占用一个字节,所以
字符常量不支持4个字符以上的情况,如'1'、'10'、'100'、'1000'、'abcd'都是可以的,
但'abcde'有五位,超出int范围了,会报错