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) 在 ...
随机推荐
- hdu 1956(混合图的欧拉回路)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1956 思路:先将无向边定向,比如1<->3,可以定它的方向为1->3,1的出度++, ...
- JBPM的.jpdl.xml文件中文出现乱码
在Eclipse中使用jbpm提供的工作流设计器设计好流程后,打开.jpdl.xml后发现中文全是乱码 项目和文件编码设置都是UTF-8,但是依旧乱码. 在Eclipse的配置文件 eclipse.i ...
- PHP heredoc 用法
php 中的 heredoc技术是php用来引用字符串的一种方式.在phpwind中巧妙的运用了这个技术,实现了逻辑代码和界面设计的分离. 语法: 1. 使用操作符 “<<<” 2 ...
- Vue父组件调用子组件的方法
vue中如果父组件想调用子组件的方法,可以在子组件中加上ref,然后通过this.$refs.ref.method调用,例如: 父组件: <template> <div @click ...
- 两个offer如何做选择?年薪20万vs年薪15万
(附注:本文转载于:http://www.eoeandroid.com/thread-296678-1-1.html) 前些天和一个年轻的朋友谈跳槽.朋友说她需要在两个offer里面做选择.一个是年薪 ...
- Solr schema.xml中修改id的类型为int
使用solr6的版本的时候(solr5不存在这个问题),在修改schema.xml的field时,想使用int做为id的数据类型,修改后重新加载配置的时候报错.原来schema.xml中field i ...
- Linux 使用pppd和ppp程序进行3G/4G拨号
试验环境:Linux marsboard 3.4.90 #9 SMP PREEMPT Thu Mar 3 18:28:43 CST 2016 armv7l armv7l armv7l GNU/Linu ...
- LeetCode:整数转罗马数字【12】
LeetCode:整数转罗马数字[12] 题目描述 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M. 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 10 ...
- Centos---linux配置 集群搭建
网络配置 1.创建虚拟机mini1: 1.1.网络配置 NAT网络模式模式 直接修改 /etc/sysconfig/network-script/ifcfg-eth0 输入service netwo ...
- C# 调用VS自带程序WebDev.WebServer40.EXE 源代码
通过Process.Start启动,VS自带程序WebDev.WebServer40.EXE 在内网架设网站时,为安装IIS条件下用VS自带的小程序来测试效果非常不错! using System; u ...