C语言相关概念和易错语法(9)

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范围了,会报错
 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值