C语言一个细节地方的说明【防止使用不当而出错】
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语言一个细节地方的说明【防止使用不当而出错】的更多相关文章
- Luogu3163 [CQOI2014]危桥 ---- 网络流 及 一个细节的解释
Luogu3163 [CQOI2014]危桥 题意 有$n$个点和$m$条边,有些边可以无限次数的走,有些边这辈子只能走两次,给定两个起点和终点$a_1 --> a_2$(起点 --> 终 ...
- Protoc Buffer 优化传输大小的一个细节
Protoc Buffer 是我们比较常用的序列化框架,Protocol Buffer 序列化后的占空间小,传输高效,可以在不同编程语言以及平台之间传输.今天这篇文章主要介绍 Protocol Buf ...
- 【JOB】Oracle中JOB的创建方法以及一个细节的探究
在Oracle中可以使用JOB来实现一些任务的自动化执行,类似于UNIX操作系统crontab命令的功能.简单演示一下,供参考. 1.创建表T,包含一个X字段,定义为日期类型,方便后面的定时任务测试. ...
- IOS 从一个小地方想到……
//(一个比较好的地方是 : cancel代表取消的意思,suspended,表示已经挂起,这些英文记住了用来命名挺好的,看看别人的过去时都是加ed的,就是这么强,所以语法不好的话,多关注ios的命名 ...
- java比.net优美的一个小地方
用了四年的.net,今年转做java,内心一直吐槽java的烦琐,今天发现了一个java值得我为之点赞的地方 java的枚举居然可以这么玩,废话不多,上demo package com.sunline ...
- 读《锋利的jQuery》中first-child时的一个细节
今天在看<锋利的jQuery>这书时,看到过滤选择器那一节.有个知识点引起了我的注意. (我不用书里一模一样的代码做例子)举个简单的例子-代码: <ul> <li> ...
- 关于eclipse open call hierarchy功能的一个细节
这个功能对应的快捷键是ctrl alt H,大家应该都很熟悉了.默认是查找这个方法的被调用堆栈.90%的人应该也是习惯这个默认的功能的,也基本无视它的另一个功能. 昨天重启eclipe之后,我的ecl ...
- java Integer包装类装箱的一个细节
原文:https://www.cnblogs.com/JackPn/p/9392145.html java有八个基本数据类型,每个都有对应的一个包装类,比如int对应的Integer.从jdk1.5开 ...
- onCreateView的一个细节--Fragment
public View onCreateView(LayoutInflater inflater, ViewGroup contaiiner, Bundle savedInstanceState) 在 ...
随机推荐
- (转)Resources和AssetBundle(新旧版)学习
Resources: Resources的缺点:1.与显示Inspector上直接引用相比,Resources使用不方便. 2.不管你Resources上的资源是否调用了,当你发布的时候, ...
- ChemDraw是这样预测诺氟沙星NMR谱
化学绘图软件ChemDraw是一款在生化领域都可以使用的软件,诺氟沙星是一款常用的肠炎药,是生物化学领域的常见研究对象,在研究过程中需要预测它的NMR谱.这个时候如果用最新的ChemOffice 15 ...
- php读取xml的神器
<?xml version="1.0 encoding="UTF-8"?> <humans> <zhangying> <name ...
- Genealogical tree
Genealogical tree Time Limit: 1000MS Memory Limit: 65536KTotal Submissions: 6032 Accepted: 3973 Spec ...
- Strange Optimization(扩展欧几里得)
Strange Optimization Accepted : 67 Submit : 289 Time Limit : 1000 MS Memory Limit : 65536 KB Str ...
- Building Shops
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others) Total Submissi ...
- MySQL (时间)日期相减取天数
select TO_DAYS(str_to_date('12/1/2001 12:00:00 AM','%m/%d/%Y')) -TO_DAYS(str_to_date('11/28/2001 12: ...
- 对宽度的控制原则 git commit -a -m "M 1、完成less计算得出图片的均分布局;";git push origin master:master
<script> import wepy from 'wepy' import api from '../api/api' export default class recharge ex ...
- JavaScript通过preventDefault()使input[type=text]禁止输入但保留光标
一.说明 取消事件的默认动作. 该方法将通知 Web 浏览器不要执行与事件关联的默认动作(如果存在这样的动作).例如,如果 type 属性是 "submit",在事件传播的任意阶段 ...
- python问号堂--第二篇
1.分别书写数字5,10,32,7的二进制表示? 5---0b101 10---0b1010 32---0b100000 7---0b111 以上结果可以bin()来检测 2. ...