PoEdu培训 C语言提高班4 符号
文章类别: 培训笔记 0 评论

PoEdu培训 C语言提高班4 符号

文章类别: 培训笔记 0 评论

常用符号

符号表

Alt 符号表

注释

注释分为 单行注释 //..., 多行注释 /* ... */
注释不会影响到程序的运行, 在编译期间, 编译器会将注释以空格代替.
注释是对代码的一种注解, 我们必须写注释
在出现魔数, 或者复杂语句, 或者很多变量, 或者某个功能函数上面, 我们需要添加注释

注意

注释一定要清晰, 意思表达需要准确易懂.
注释一定不要喧宾夺主, 注释不宜过多
注释中, 尽量不要使用缩写
注释需严谨, 不要使用聊天的方式书写

连续符/接续符

接续符的符号为 \
它的作用, 是连接当前行下一行语句, 组成完整的语句.

Alt 接续符例子

注意

使用了接续符的语句中, 并不包含换行符
接续符的后面不能有空格, 也就是说, 接续符作为本行的最后一个字符(除了换行外)
接续符的下一行最开始不能有空格, 也就是说, 接续符下一行的第一个字符一定不能是空格
如果文本段落中有空格, 请将接续符放到这些空格的后面

单引号和双引号

单引号

单引号中包含的, 是一个字符
'\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 来进行++, 则报错!

优先级

优先级太复杂, 极度不推荐过分依赖优先级

强烈推荐使用( )来明确优先级计算

如有错误,请提出指正!谢谢.

回复