C语言剖析--- ++操作符

C语言剖析— ++操作符

可以先看下面有段代码

int main()
{
    int k = 2;
    int a = 1;
    
    k = k++ + k++;
    printf("k = %d\n", k);
    
    if( a-- && a )
    {
        printf("a = %d\n", a);
    }
    
    return 0;
}

这里运行的答案是(这里使用的编译器是用linux gcc 编译器)

K=6

为什么呢,我们先分析:

 k = k++ + k++;

这里有两个k++操作,但是在同一条语句上,这里实际上是先取当前k的值而不是取k++后的值所以这两次++的操作在这条语句上并没有执行,所以此时 k=4;
OK ,来到打印语句 printf(); 这个时候两个++操作开始生效了,此时的k的值会进行两次++操作所以最后打印就是上面的结果.
(PS:上面的过程可以用VS这个IDE进行调试,然后打开汇编就可以了解到这个实际过程)

好了那么可能现在还有一个疑惑:

if( a-- && a )

为什么这个条件判断不成立呢
这里涉及到C语言的顺序点的问题, 顺序点是C语言中变量修改的最后时机
C语言里面 ; && || ? 都是顺序点, 意思是遇到这些符号之前的变量操作就会执行修改保存

OK 知道这些那么 回到问题 上面的 if( a-- && a ) 为什么不执行的问题就很清晰了
因为 if语句中 && 是顺序点 所以前面的 a–会执行自减操作 得到a==0 所以条件不成立

参考自
狄泰 C语言深度解析

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C语言的词法分析程序主要用于对源程序进行分析,将源程序的各种单词进行分类提取。根据引用和引用提供的信息,词法分析程序可以将源程序的关键字、自定义标识符、整数、界符和运算符进行分析和提取。 关键字包括main、if、else、for、while和int等。自定义标识符是除了关键字之外的标识符。整数是无符号的整数。界符包括大括号{}、小括号()、逗号,和分号;。运算符包括等号=、减号-、乘号*、除号/、小于号<、左移运算符<<、大于等于>=、等于==和不等于!=等。 在编写词法分析程序时,可以使用字符串处理函数,例如gets、strcpy和strcmp等,来从键盘获取源程序输入,并对字符串进行复制和比较操作,以便进行单词的分类和提取。 通过词法分析程序,可以将源程序的各种单词按照其类型进行分类,并提取出来,从而为后续的语法分析和语义分析提供基础。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [小C语言--词法分析程序](https://blog.csdn.net/wq3699823668/article/details/100599572)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [A - 小C语言--词法分析程序](https://blog.csdn.net/Mercury_Lc/article/details/108685127)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [词法分析源程序(c语言编写)](https://download.csdn.net/download/wviyong/1797051)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值