iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C语言简明讲解操作符++和--的使用方法
  • 343
分享到

C语言简明讲解操作符++和--的使用方法

2024-04-02 19:04:59 343人浏览 八月长安
摘要

目录一、++与--操作符的本质二、++与-- 操作符使用分析三、小结一、++与--操作符的本质 ++ 和 -- 操作符对应两条汇编指令 前置 变量自增(减)1取变量值 后置 取变量值

一、++与--操作符的本质

++ 和 -- 操作符对应两条汇编指令

前置

  • 变量自增(减)1
  • 取变量值

后置

  • 取变量值
  • 变量自增(减)1

下面看一段神奇的代码:

#include <stdio.h> 
 
int main()
{
    int i = 0;
    int r = 0;
 
    r = (i++) + (i++) + (i++);
 
    printf("i = %d\n", i);
    printf("r = %d\n", r);
 
    r = (++i) + (++i) + (++i);
 
    printf("i = %d\n", i);
    printf("r = %d\n", r);
 
    return 0;
}

在 VS2012中,它的运行结果如下:

GCc 编译器中,它的运行结果如下:

这是由于不同编译器对 ++ 和 -- 的相对哦执行次序不一样。

二、++与-- 操作符使用分析

  • C 语言中只规定了 ++ 和 -- 对应指令的相对执行次序
  • ++ 和 -- 对应的汇编指令不一定连续运行
  • 在混合运算中,++ 和 -- 的汇编指令可能被打断执行

++ 和 -- 参与混合运算结果是不确定的。

笔试面试中的“奇葩”题

贪心法:++,-- 表达式的阅读技巧

  • 编译器处理的每个符号应该尽可能多的包含字符
  • 编译器以从左向右的顺序一个一个尽可能多的读入字符
  • 当读入的字符不可能和已读入的字符组成合法符号为止

下面看一段代码:

#include <stdio.h>
 
int main()
{   
    int i = 0;
    int j = ++i+++i+++i;
    
    int a = 1;
    int b = 4;
    int c = a+++b;
    
    int* p = &a;
    
    b = b/ *p;
 
    printf("i = %d\n", i);
    printf("j = %d\n", j);
    printf("a = %d\n", a);
    printf("b = %d\n", b);
    printf("c = %d\n", c);
      
    return 0;
}

运行后编译器会报错:

这行代码为什么报错呢?int j = ++i+++i+++i; 原因就是编译器发现 ++i 后由于贪心,会继续往下找,发现 ++i+ 后编译器觉得符合语法规则,继续往下找,当出现 ++i++时编译器感觉不对,开始计算,就变成 1++,这是不合法的,所以编译器就会报错。

空格可以作为C语言中一个完整符号的休止符编译器读入空格后立即对之前读入的符号进行处理。

所以下面这么写就可以:

#include <stdio.h>
 
int main()
{   
    int i = 0;
    int j = ++i + ++i + ++i;
    
    int a = 1;
    int b = 4;
    int c = a++ + b;
    
    int* p = &a;
    
    b = b/ *p;
 
    printf("i = %d\n", i);
    printf("j = %d\n", j);
    printf("a = %d\n", a);
    printf("b = %d\n", b);
    printf("c = %d\n", c);
      
    return 0;
}

编译结果如下:

三、小结

  • ++ 和 -- 操作符在混合运算中的行为可能不同
  • 编译器通过贪心法处理表达式中的子表达式
  • 空格可以作为C语言中一个完整符号的休止符
  • 编译器读入空格后立即对之前读入的符号进行处理

到此这篇关于C语言简明讲解操作符++和--的使用方法的文章就介绍到这了,更多相关C语言 ++和--内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: C语言简明讲解操作符++和--的使用方法

本文链接: https://www.lsjlt.com/news/146538.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C语言简明讲解操作符++和--的使用方法
    目录一、++与--操作符的本质二、++与-- 操作符使用分析三、小结一、++与--操作符的本质 ++ 和 -- 操作符对应两条汇编指令 前置 变量自增(减)1取变量值 后置 取变量值...
    99+
    2024-04-02
  • C语言简明讲解队列的实现方法
    目录前言队列的表示和实现队列的概念及结构代码实现束语前言 大家好啊,我又双叒叕来水博客了,道路是曲折的,前途是光明的,事物是呈螺旋式上升的,事物最终的发展结果还是我们多多少少能够决定...
    99+
    2024-04-02
  • C语言简明讲解预编译的使用
    目录小复习1、内置符号2、自定义符号3、自定义宏4、条件编译小复习 预处理,预编译是编译的第一步。 会有三件基本的事情发生: 引入#include去除注释修改#define 1、内置...
    99+
    2024-04-02
  • C语言简明讲解类型转换的使用与作用
    目录一、类型之间的转换二、强制类型转换三、隐式类型转换四、表达式中的隐式类型转换五、小结一、类型之间的转换 C语言中的数据类型可以进行转换 强制类型转换隐式类型转换 二、强制类型转...
    99+
    2024-04-02
  • C语言操作符#与##使用方法详解
    目录一、# 运算符二、## 运算符三、小结一、# 运算符 # 运算符用于在预处理期将宏参数转换为字符串# 的转换作用是在预处理期完成的,因此只在宏定义中有效编译器不知道 # 的转换作...
    99+
    2024-04-02
  • C语言简明讲解三目运算符和逗号表达式的使用
    目录一、三目运算符二、逗号表达式三、小结一、三目运算符 三目运算符( a b : c)可以作为逻辑运算的载体 规则:当 a 的值为真时,返回 b 的值;否则返回 c 的值 下面看一...
    99+
    2024-04-02
  • C语言各类操作符全面讲解
    目录1 算术操作符2 移位操作符3 位操作符4 赋值操作符5 单目操作符5.1 ! 逻辑反操作5.2 sizeof 和数组6 关系操作符7 逻辑操作符8 条件操作符9 逗号表达式10...
    99+
    2024-04-02
  • C语言全面细致精讲操作符的使用
    目录前言一、算术操作符二、移位操作符1.左移操作符2.右移操作符三、位操作符四、赋值操作符复合赋值符五、单目操作符单目操作符介绍1.sizeof 和 数组2.++和–运算...
    99+
    2024-04-02
  • C语言操作符++和--怎么使用
    本篇内容介绍了“C语言操作符++和--怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、++与--操作符的本质++ 和 -- 操作符...
    99+
    2023-06-30
  • C语言简明讲解变量的属性
    目录一、C语言中的变量属性二、auto 关键字三、register 关键字四、static 关键字五、extern 关键字六、小结一、C语言中的变量属性 C语言中的变量可以有自己的属...
    99+
    2024-04-02
  • C语言简明讲解归并排序的应用
    目录一.归并排序1.1归并排序引入1.2归并排序的概念1.3归并排序的原理1.4实例说明1.5具体步骤说明1.6代码实现1.7性能分析一.归并排序 1.1归并排序引入 对于堆排序来说...
    99+
    2024-04-02
  • C语言简明讲解快速排序的应用
    目录快速排序1.1快速排序引入1.2快速排序的基本思想1.3快速排序的排序流程1.4实例说明1.5代码实现1.6性能分析快速排序 快速排序,说白了就是给基准数据找其正确索引位置的过程...
    99+
    2024-04-02
  • C语言中单目操作符++、–的实例讲解
    目录前言++单目操作符- -单目操作符附1:代码演示:演示代码提取:总结前言 大家先判断下下面代码的运行结果 答案: 如果你全对了,那么恭喜大佬,这篇博客可能对你收益不大,全...
    99+
    2024-04-02
  • C语言操作符超详细讲解上篇
    目录前言1、操作符的分类2、算术操作符3、移位操作符3.1 左移操作符3.1.1 正数左移1位3.1.2 负数左移1位3.2 右移操作符3.2.1 正数右移1位3.2.2 负数右移1...
    99+
    2024-04-02
  • C语言操作符超详细讲解下篇
    目录前言赋值操作符单目操作符单目操作符介绍sizeof 和 数组关系操作符逻辑操作符条件操作符逗号表达式下标引用与函数调用和结构成员[ ] 下标引用操作符( ) 函数调用操作符访问一...
    99+
    2024-04-02
  • C语言简明讲解单引号与双引号的使用
    目录一、单引号和双引号二、小贴士三、程序实例分析1四、程序实例分析2五、容易混淆的代码六、小结一、单引号和双引号 C语言中的单引号用来表示字符字面量C语言中的双引号用来表示字符串字面...
    99+
    2024-04-02
  • C++简明讲解类型转换的使用与作用
    目录一、C语言中的强制类型转换二、C语言强制类型转换存在的问题三、C++ 中的类型转换四、小结一、C语言中的强制类型转换 转换的语法如下: (Type) (Expression) T...
    99+
    2024-04-02
  • C语言全面讲解顺序表使用操作
    目录一、顺序表的结构定义二、顺序表的结构操作1.初始化2.插入操作3.删除操作4.扩容操作5.释放操作6.输出三、示例编程环境为 ubuntu 18.04。 顺序表需要连续一片存储空...
    99+
    2024-04-02
  • C语言详细讲解接续符和转义符的使用
    目录一、接续符的意义二、接续符的使用三、转义符的意义四、转义符的使用五、转义符和其他的语法混合六、小结一、接续符的意义 C语言中的接续符(\)是指示编译器行为的利器 下面看一段接续符...
    99+
    2024-04-02
  • C语言详细讲解#pragma的使用方法
    目录一、#pragma 简介二、#pragma message三、#pragma once四、#pragma pack五、小结一、#pragma 简介 #pragma 用于指示编译器...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作