常用符号
符号表

注释
注释分为
单行注释 //...,多行注释 /* ... */
注释不会影响到程序的运行,在编译期间, 编译器会将注释以空格代替.
注释是对代码的一种注解, 我们必须写注释
在出现魔数, 或者复杂语句, 或者很多变量, 或者某个功能函数上面, 我们需要添加注释
注意
注释一定要
清晰, 意思表达需要准确易懂.
注释一定不要喧宾夺主, 注释不宜过多
注释中, 尽量不要使用缩写
注释需严谨, 不要使用聊天的方式书写
连续符/接续符
接续符的符号为
\
它的作用, 是连接当前行和下一行语句, 组成完整的语句.

注意
使用了接续符的语句中, 并
不包含换行符接续符的后面不能有空格, 也就是说, 接续符作为本行的最后一个字符(除了换行外)接续符的下一行最开始不能有空格, 也就是说, 接续符下一行的第一个字符一定不能是空格
如果文本段落中有空格, 请将接续符放到这些空格的后面
单引号和双引号
单引号
单引号中包含的, 是
一个字符'\0'也是一个字符, 因为\的作用, 是一个转意字符
单引号中包含的,本质是一个数值.
双引号
双引号中包含的, 是
字符串
双引号中包含的,本质上是一个地址.
双引号中包含的, 会在末尾默认加上一个'\0'字符作为字符串的结尾
逻辑运算符
// 猜猜结果
#include <stdio.h>
int main()
{
int i = 0, j = 0;
if (i++ || ++j)
printf("i:[%d], j:[%d]\n", i, j);
i = 0, j = 0;
if (++i || ++j)
printf("i:[%d], j:[%d]\n", i, j)
i = 0, j = 0;
if (i++ && ++j)
printf("i:[%d], j:[%d]\n", i, j)
i = 0, j = 0;
if (++i && j++)
printf("i:[%d], j:[%d]\n", i, j)
i = 0, j = 0;
if (++i && ++j)
printf("i:[%d], j:[%d]\n", i, j)
return 0;
}&&
逻辑
与运算符从左向右运算遇到 假 则停止运算
||
逻辑
或运算符从左向右运算遇到 真 则停止运算
!
取反运算符
得到的值永远是0或者1
因为!在进行运算的时候, 会将数值转换为真或者假
还记得吗?0为假, 非0为真
三目运算符
用法:
表达式 ? 为真的结果 : 为假的结果
三目运算符返回的是值
//你能看懂吗?
#include <stdio.h>
int main()
{
int i = 10, j = 20;
// 高逼格的 i = j
*(i < j ? &i : &j) = i > j ? i : j;
printf("i=[%d], j=[%d]\n", i, j);
return 0;
}自增自减/运算符
自增运算符
++
分为前加加和后加加
自减运算符
--
分为前减减和后减减
注意
// 面试宝典
// j = ?
#include <stdio.h>
int main()
{
int i = 0;
int j = (++i) + (++i) + (++i);
return 0;
}上述结果为
9
其实它是一种未定义的行为
但是, 在gcc/vs编译器的实现中, 语句先被解析为 3个++i, 然后在进行+运算
所以结果为 9
面试宝典 贪心法
// 测试代码
#include <stdio.h>
int main()
{
int i = 0;
// 这句话报错
int j = ++i + ++i + ++i;
return 0;
}贪心法: 是我们编译器在
解析我们语句的时候进行的算法
贪心原则: 它会将符号进行最大化的读入
贪心原则是在相同优先级情况下才会采取的算法原则
我们解析一下上边的话
首先, 读取到 ++, 没有问题
然后在读, 又得到了一个 ++,
然后读到一个 +,
再继续读, 又读取到一个 ++,
然后又得到一个 +
那么我们的语句则变为:
int j = ++i++ + i++ + i;
那么, 首先, 我们的++i进行运算, 得到值为1
那么, 在对这个 1 来进行++, 则报错!优先级
优先级太复杂, 极度不推荐过分依赖优先级强烈推荐使用
( )来明确优先级计算
如有错误,请提出指正!谢谢.
本文由 花心胡萝卜 创作,采用 知识共享署名4.0 国际许可协议进行许可
本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名
最后编辑时间为: 2017-01-04 at 01:49 am