使用 const 创建常量和使用 volatie 优化变量

C语言中使用 const 定义常量。

例如:

const INT a = 10;

此处如果添加a = 20;,编辑器则会报错,因为此处 a 是只读的。

在编译过程中,由 const 定义的常量使用字符表存储,而不占用内存,提高了程序的效率。

注意:为了区别变量和常量,编程时常常使用大写字母来置顶常量的名称来提高可读性。

使用 volatile 定义一个常常需要更改的变量。使用 volatile 定义的变量会在编译器优化时更新,而不是读取在寄存器中的副本。

例如:

int data = 1,a,b;
a = data;
...
b=data;

a 在请求变量 data 时,data 的值被写到了寄存器中。但此时 data 是一个快速更新的值,在程序没有预料到的时候更改为新的值;而 b 请求 data 的值时,因为寄存器中有现成的 data 值,所以程序会直接将寄存器中过时的 data 值给 b ,因此程序可能出现错误。

volatile data a = 1;
int a,b;
a = data;
...
b = data;

但当使用 volatile 变量时,程序会重新读取 data 的值给 b ,所以能避免此类错误。

使用简短的数据类型名

有时候会遇到长数据类型名,例如 long long int ,不方便引用。此时可使用 typedef 来为 long long int 指定新数据类型名。

例如:

typedef int it;
it data1 =1; /* 使用名称定义为 it 的 int 型数据类型 */
it data2 =2;

2020年2月20日补充

使用 sizeof 取得数据大小

使用 sizeof() 可以取得括号内最终数值所占的字节数。

注意:sizeof 不能用于取出数字的位数

例如:

int data = 10
int main(void) {
printf("%d\n",sizeof(data)); /* 输出内容为 4 */
return 0;
}

有符号数和无符号数

C语言对变量提供了两个类型。其中一个为 signed ,即有符号数;而另一个为 unsigned ,即无符号数。 signed 型可以用来表示任何数,而 unsigned 型只能用来表示非负数。

其中, signed 型数在内存中的首位用于表示正负,可以为 0 或 1 。unsigned 型则是直接表示。由于这种原因,产生了“安卓手机时间只能调到 2038 年”的说法。因为 C 语言的时间使用 signed 型表示,到达这个时间,除第一位外,其他数位均为 9 ,因此便会迫使进 1 ,因此引发错误使时间会变为负。

例如:

signed int data = -1 /* 也可以是 1 */
unsigned int data = 1 /* 只能为 1 ,只能为非负数 */

[C语言学习笔记四]变量与系统的交互的更多相关文章

  1. Go语言学习笔记四: 运算符

    Go语言学习笔记四: 运算符 这章知识好无聊呀,本来想跨过去,但没准有初学者要学,还是写写吧. 运算符种类 与你预期的一样,Go的特点就是啥都有,爱用哪个用哪个,所以市面上的运算符基本都有. 算术运算 ...

  2. 【Linux_Shell 脚本编程学习笔记四、监控系统内存并报警企业案例脚本】

    前置知识:awk 参考学习博客:https://www.cnblogs.com/bugingcode/p/8287914.html awk 'BEGIN{ commands } pattern{ co ...

  3. 【GO】GO语言学习笔记四

    流程控制 1.条件语句 举个栗子: if x>5 { return 1; }else{ return 0; } 注意:  条件语句不需要使用括号将条件包含起来(); 无论语句体内有几条语句, ...

  4. Go语言学习笔记(四) [array、slice、map]

    日期:2014年7月22日   一.array[数组]   1.定义:array 由 [n]<type> 定义,n 标示 array 的长度,而 <type> 标示希望存储的内 ...

  5. Go语言学习笔记(二) [变量、类型、关键字]

    日期:2014年7月19日 1.Go 在语法上有着类 C 的感觉.如果你希望将两个(或更多)语句放在一行书写,它们 必须用分号分隔.一般情况下,你不需要分号.   2.Go 同其他语言不同的地方在于变 ...

  6. c语言学习笔记 const变量

    在c语言的编程过程中经常会遇到有常数参加运算的运算,比如这种. int a=100*b; 这个100我们叫常数或者叫常量,但是程序中我们不推荐这种直接写常数的方法,有两个缺点. 第一是程序可读性差. ...

  7. Go语言学习笔记1 变量,类型以及赋值

    1.变量 1.1 声明变量 使用var关键字可以创建一个指定类型的变量: var i int = 0 var i = 0 var i int 以上三个表达式均是合法的,第三个表达式会将i初始化为int ...

  8. Go语言学习笔记(2)——变量、常量

    1. 变量(变量由字母.数字和下划线组成,且不能以数字开头!)      1.1 第一种 var name type // 未赋值时使用默认值 name = value 1.2 第二种: 根据所赋的值 ...

  9. python的学习笔记01_2变量 常量 注释 用户交互 格式化输出

    变量是什么? 变量的作用  Variables are used to store information to be referenced and manipulated in a computer ...

随机推荐

  1. sbt package报错:a bytes-like object is required, not 'str'

    Traceback (most recent call last): File , in <module> s.sendall(content) TypeError: a bytes-li ...

  2. 项目启动时报错:java.io.EOFException

    解决方案 删除Tomcat里面的work\Catalina\localhost下的项目文件内容即可解决 问题原因 原因是由于项目测试中class文件或者其它文件更新过频繁

  3. 监听Ueditor的 iframe中的按键,按键组合事件(Ctrl+s)

    个人博客 地址:https://www.wenhaofan.com/a/20190716214214 监听按键事件 ueditor.ready(function() {     UE.dom.domU ...

  4. MacOs使用CleanMyMac X清除可清除空间

    写在前面 本文介绍如何使用CleanMyMac X清除可清除的空间 可以看到,可清除的空间达到了125.79GB,虽然说不影响系统的使用,但是在使用时间机器进行备份的时候,仍然会将可清除空间当成备份的 ...

  5. codechef Chef and The Colored Grid

    难度 \(hard\) 题意 \(3\times n\)的方格,前两行已分别填入\(n-\)排列,要求求第三行填入\(n-\)排列,使得每行每列数不重复的方案数(数据保证前两行合法)\(n\le 10 ...

  6. 使用mysql8.+版本,使用mybatis的代码生成工具:mybatis-generator连接数据库时Unknown initial character set index '255' received from server. Initial client character set can be forced via the 'characterEncoding' property.

    Error connecting to database: (using class org.gjt.mm.mysql.Driver)Unknown initial character set ind ...

  7. Web简单小结

    一.HTML DOM 使 JavaScript 有能力对 HTML 事件做出反应:<h1 onclick="this.innerHTML='你点我干啥'">请点击这里& ...

  8. GD库的基本信息,图像的旋转、水印、缩略图、验证码,以及图像类的封装

    GD库检测 <?php phpinfo(); ?> GD库安装• Windows 使用phpstudy • Linux 编译安装 –with-gd• Linux 编译安装扩展 GD库支持的 ...

  9. Tram POJ - 1847 spfa

    #include<iostream> #include<algorithm> #include<queue> #include<cstdio> #inc ...

  10. [TJOI2007] 路标设置 - 二分答案,贪心

    考虑到答案满足可二分性,段内可以贪心,所以暴力二分即可 注意-1 详见代码(我这题都能写WA) #include <bits/stdc++.h> using namespace std; ...