1.运行如下的代码:

#include <stdio.h>
#include <string.h> int main()
{
int a;
a=1;
int s[4]; memset(s, 0, sizeof(s));
s[a++]=a++;
printf("s[0]=%d\n", s[0]);
printf("s[1]=%d\n", s[1]);
printf("s[2]=%d\n", s[2]);
printf("s[3]=%d\n", s[3]);
printf("a = %d\n\n\n", a); a=1; memset(s, 0, sizeof(s));
s[a++]=++a;
printf("s[0]=%d\n", s[0]);
printf("s[1]=%d\n", s[1]);
printf("s[2]=%d\n", s[2]);
printf("s[3]=%d\n", s[3]);
printf("a = %d\n\n\n", a); a=1; memset(s, 0, sizeof(s));
s[++a]=a++;
printf("s[0]=%d\n", s[0]);
printf("s[1]=%d\n", s[1]);
printf("s[2]=%d\n", s[2]);
printf("s[3]=%d\n", s[3]);
printf("a = %d\n\n\n", a); a=1; memset(s, 0, sizeof(s));
s[++a]=++a;
printf("s[0]=%d\n", s[0]);
printf("s[1]=%d\n", s[1]);
printf("s[2]=%d\n", s[2]);
printf("s[3]=%d\n", s[3]);
printf("a = %d\n\n", a);
return 0;
}

输出结果为:

s[0]=0
s[1]=1
s[2]=0
s[3]=0
a = 3

说明:a=1; s[a++]=a++;

a++会先使用a的值,再进行计算。先进行了这样的赋值s[1]=1;  然后又进行了两次a++的运算,所以a=3。

s[0]=0
s[1]=0
s[2]=2
s[3]=0
a = 3

说明:a=1; s[a++]=++a;

先进行一次++a, a=2。然后进行了s[2]=2; 再进行一次a++,最后还是a=3。

s[0]=0
s[1]=0
s[2]=2
s[3]=0
a = 3

说明:a=1; s[++a]=a++;
        先进行一次++a, a=2。 再进行s[2]=2;  最后进行a++, 最后a=3;
s[0]=0
s[1]=0
s[2]=0
s[3]=3
a = 3

说明: 先进行两次++a, a=3;  再进行s[3]=3;

总结:在上面的这种带增量运算的式子中,在进行赋值运算前,先把所有的++x;的这种运算做完,保存好此时的变量值。在进行赋值运算。

赋值运算做完后,再进行x++;的这种增量运算式子。 这样就可以解释上面的所有运行结果了。

(PS:完全可以用上面的代码的运行结果来考察一个人对C语言运算的掌握程度啊!)

C语言一个细节地方的说明【防止使用不当而出错】的更多相关文章

  1. Luogu3163 [CQOI2014]危桥 ---- 网络流 及 一个细节的解释

    Luogu3163 [CQOI2014]危桥 题意 有$n$个点和$m$条边,有些边可以无限次数的走,有些边这辈子只能走两次,给定两个起点和终点$a_1 --> a_2$(起点 --> 终 ...

  2. Protoc Buffer 优化传输大小的一个细节

    Protoc Buffer 是我们比较常用的序列化框架,Protocol Buffer 序列化后的占空间小,传输高效,可以在不同编程语言以及平台之间传输.今天这篇文章主要介绍 Protocol Buf ...

  3. 【JOB】Oracle中JOB的创建方法以及一个细节的探究

    在Oracle中可以使用JOB来实现一些任务的自动化执行,类似于UNIX操作系统crontab命令的功能.简单演示一下,供参考. 1.创建表T,包含一个X字段,定义为日期类型,方便后面的定时任务测试. ...

  4. IOS 从一个小地方想到……

    //(一个比较好的地方是 : cancel代表取消的意思,suspended,表示已经挂起,这些英文记住了用来命名挺好的,看看别人的过去时都是加ed的,就是这么强,所以语法不好的话,多关注ios的命名 ...

  5. java比.net优美的一个小地方

    用了四年的.net,今年转做java,内心一直吐槽java的烦琐,今天发现了一个java值得我为之点赞的地方 java的枚举居然可以这么玩,废话不多,上demo package com.sunline ...

  6. 读《锋利的jQuery》中first-child时的一个细节

    今天在看<锋利的jQuery>这书时,看到过滤选择器那一节.有个知识点引起了我的注意. (我不用书里一模一样的代码做例子)举个简单的例子-代码: <ul> <li> ...

  7. 关于eclipse open call hierarchy功能的一个细节

    这个功能对应的快捷键是ctrl alt H,大家应该都很熟悉了.默认是查找这个方法的被调用堆栈.90%的人应该也是习惯这个默认的功能的,也基本无视它的另一个功能. 昨天重启eclipe之后,我的ecl ...

  8. java Integer包装类装箱的一个细节

    原文:https://www.cnblogs.com/JackPn/p/9392145.html java有八个基本数据类型,每个都有对应的一个包装类,比如int对应的Integer.从jdk1.5开 ...

  9. onCreateView的一个细节--Fragment

    public View onCreateView(LayoutInflater inflater, ViewGroup contaiiner, Bundle savedInstanceState) 在 ...

随机推荐

  1. Ant Design使用问题记录

    公司的测试管理平台前端使用的是Ant Design of React框架,后台使用的是python,数据库用的是mysql.没有参与前期的开发,听说是工作了10年积累下来的一个暂且可用的管理平台,开发 ...

  2. MySQL的下载及安装

    前言:不仅要知其然,还要知所以然 MySQL数据库作为关系型数据库中的佼佼者,因其体积小,速度快,成本低,不仅受到了市场的极大追捧,也受到了广大程序员的青睐.接下来,就给大家说一下,MySQL的下载和 ...

  3. Windows中安装Scrapy

    在linux中安装Scrapy只需要导入一些非python的支持包,在windows中安装Scrapy则是一波三折. 总之来说,主要分为以下几个步骤,可能由于系统问题(国内个人机子,甚至是小企业的机子 ...

  4. Android Studio使用心得 - 常见问题集锦

    FBI Warning:欢迎转载,但请标明出处:http://blog.csdn.net/codezjx/article/details/38669939,未经本人允许请勿用于商业用途,感谢支持! 整 ...

  5. Android无线测试之—UiAutomator UiObject API介绍一

    UiObject类介绍 一.UiObject类介绍 UiObject代表一个UI元素,通过UiSelector查找跳进创建一个UiObject实例,找到这个实例以后可以对这个实例进行各类操作 二.Ui ...

  6. Android无线测试之—UiAutomator编译与运行测试代码

    一.创建build文件 android create uitest-project -n <jars> -t 1 -p <workspace path> 其中-n后面跟的是要发 ...

  7. 【BZOJ4716】假摔 二分+暴力

    [BZOJ4716]假摔 Description [题目背景] 小Q最近喜欢上了一款游戏,名为<舰队connection>,在游戏中,小Q指挥强大的舰队南征北战,从而成为了一名dalao. ...

  8. linux 终端操作快捷键

    熟练使用快捷键可以很大的提高效率,以下列出一些常用的快捷键命令方便随时查阅 1. 移动光标 Ctrl + a 标移到行首.它在多数文本编辑器和 Mozilla 的 URL 字段内可以使用.Ctrl + ...

  9. RabbitMQ安装篇

    一切不是自己实战,且跑不起来的程序都是在耍流氓! 先下载: http://www.erlang.org/downloads     erlang 包

  10. nosql_action

    ps -aux  查当前端口占用 connecting to: test > show dbs local .078125GB testphp .203125GB > use testph ...