C陷阱与指针阅读笔记

C陷阱与指针阅读笔记

第一章 词法 “陷阱”

1.1 = 不同于 ==

  • = : 赋值运算符,赋值
  • ==:关系运算符,比较
  • = (优先级) < | | (优先级)
//错将 == 用作 =
int a = 0;
int b = 5;
if(a = b)	
{
	printf("1/n");    
}
else
    printf("2/n");

//输出:1
//结果分析:b的值赋给a,若b为0,输出2。

//错将 = 用作 ==
while(c = ' ' || c == '\t' || c == '\n')
{
    printf("1\n");
}

//结果:进入死循环
//结果分析:' '不为0,' '的ASCII为32。无论c为何值,c = ' '都将成立,且||运算符有短路特性,运算符左为真则为真,所以会一直循环下去,输出1换行。

1.2 & 和 | 不同于 && 和 ||

  • &&和| | 具有短路功能, &和 | 没有。

  • & 和 | 用于位运算。

  • && 和 | | 用于逻辑运算,进行条件判断。

1.3 词法分析中的“贪心法”

一个字符一个字符读入,如果该字符可能组成一个符号,那么再读入下一个字符,判断两个字符是否可以组成一个有意义的字符。如果可以,重复判断,直到不能组成一个字符。

//a--- 等同于 a-- -

a = b /*p;			// 错误: /* 被解释成 注释语句,相当于a = b

a = b / *p;			// 正确
a = b / (*p);		// 正确

注意:不能嵌入空白(空格符、制表符和换行符)。

1.4 整形常量

​ 八进制:0开头,例如0143。

1.5 字符与字符串

  • 单引号:实际上代表一个整数,整数值对应编译器采取的字符集中的序列值。
  • 双引号:代表一个指向数组的指针,末尾有一个隐藏的’\0’。
char hello1[] = "hello world";
char hello2[] = 'hello world';	//VS 2019中出现报错

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值