今天我们来仔细说说常量和变量。
一,常量
记得博主当年学C语言的时候总是搞不懂什么是常量。统统当做是变量,当时并不影响写小程序,后来工作了做嵌入式开发时才暴露出基础不牢的问题。希望大家在学习时一定把概念搞清楚。
1. 整型常量
1.1 十进制整数
这个不难理解,就是我们常说的自然数。如:
int a = 123;
int b = +145;
int c = -32;
上面的代码中,“=”右面的就是十进制整数。可以带正负号,一搬“+”号省略。
1.2 八进制整数
八进制的数表示为前面带“0”的数,如:
int a = 0124;
int b = +054;
int c = -014;
上面的代码中,“=”右边都是八进制整数。看到这种貌似多余的“0”就要反应出是八进制。
1.3 十六进制整数
与八进制不同,十六进制整数以“0x”开头,如:
int a = 0x17c;
int b = +0x123;
int c = -0xfcc;
上面的代码中,“=”右边的是十六进制整数。
2. 实型常量:
2.1 十进制小数形式
与数学中的小数形式相同,如:
double a = 0.0;
double b = 0.29;
double c = 21.45;
float d = 0.1f;
上面代码中“=”右面的就是十进制小数。值得注意的是,float类型赋值时,常量的后面要加"f",因为不加这个"f" 计算机会分配一个double类型大小的空间,而前面的变量类型又是float,这时就会报错。
2.2 十进制指数形式
指数形式表示如下:
double a = 2.4E4; // 2.4 * 10 ^ 4
double b = 3.1e3; // 3.1 * 10 ^ 3
这是科学计数法的表示形式,第一行表示2.4乘以10的4次方。使用“E”或“e”都可以。
3. 字符常量
3.1 普通字符
字符常量需要用单引号表示,或者用ASCII码值。还记得上一篇中《潜伏》里的故事吗?
char a = 'A';
char b = 65;
上面代码中“=”右面的是字符常量。为什么?第二行明明是数字啊。因为ASCII码中65表示大写字母A,如果赋值给int类型的变量,它就是65,如果赋值给char型变量,它就是字母A。
3.2 转义字符
C语言中用反斜杠“\”加字符表示一直特殊的意义,叫做转义字符。下面是转义字符表。
C语言转义字符表还记得HelloWorld程序吗?里面有这样一句话:
printf("Hello World!\n");
这句话中的\n就是个转义字符,表示在输出这行字之后,再输出一个换行符号。
4. 字符串常量
记得上一篇中说过,字符串的表示是用双引号" "
char str[] = "ABCD";
这句话的意义是定义一个字符数组,这个大家可以先不了解。“=”右面就表示一个字符串常量。
需要说明的是,字符串的存储比较特殊,系统会自动在字符串后面加入一个'\0'符号。这个符号在转义字符表中可以找到,代表空字符。计算机用它表示一个字符串的结束。因此,"ABCD"在内存中其实是"ABCD\0"。
那么,问题来了。请问"a"和'a'有什么区别呢?
5. 符号常量
又叫做宏常量,是一个预处理命令,格式如下:
#define 常量名 常量
我们看下面的代码:
#define PI 3.1415926
double a = PI * 2;
上面的代码中由于有了第一句,第二句就相当于:
double a = 3.1415926 * 2;
值得注意的是,这种宏常量的表示方法相当于把定义中常量位置的东西原封不动地写在常量名的地方。经常有这样的题目:
#include <stdio.h>
#define sum 5 + 1;
void main()
{
int a = 2 * sum;
printf("%d", a);
}
请问,这段程序输出的结果是多少。如果你答12就错了,应该是11。不信你用计算机运行一下试试。
原因就是2 * sum这句在编译器看来应该是
int a = 2 * 5 + 1;
如果你的本意是想得到12,那么定义中应该这么写:
#define sum (5 + 1);
二,变量
1. 什么是变量?
上一篇中我们讲到,我们的程序在运行过程中把数据保存在内存中,每个数据保存的位置都有一个地址。如果我们每次操作数据都要写一次地址(如:0x5e34a031)那么可读性太差。因此,在C语言中我们用一个个的变量操作对应内存中数据的操作。
2. 变量的使用
一个简单的 int a = 1;其实暗地里执行了以下操作
-
定义变量
int a,在内存中开辟了4Bytes的内存空间,并且为这个空间起了个名字,叫做a -
赋值
= 1,这是变量的初始化,在a对应的内存空间中放入一个数1
再次强调,C语言中,变量在使用前一定要初始化。否则会出现意想不到的错误。原因上一篇中讲过。
例程讲解
今天我们看一个简单的小例子。
#include <stdio.h>
void main()
{
int a, b, sum;
int c = 3;
a = 1;
b = 2;
sum = a + b + c;
printf("sum = %d\n", sum);
}
程序运行结果
程序分析:
#include <stdio.h>
我们编程需要用到很多现有的工具集合,我们叫做库。库里面都有什么呢,有各种各样的工具,叫做函数。比如我们向屏幕打印数据的printf就是函数。这个后面会细讲。这句话就是告诉计算机,我们会用到stdio.h这个库,让它提前准备好。只有引用了这个库,计算机才知道到哪里找printf这个函数。
stdio.h叫做头文件。目前掌握这些就好了。后面会具体讲解。
void main()
这是一个函数的形式,后面会讲到。这个函数的内容写在两个大括号之间。目前只要知道main函数是所有程序的入口,我们写好的程序都是从这个函数开始执行的。换句话说,没有这个函数的程序无法执行。
main函数有两种形式,第一种就是我们今天用到的:
void main()
{
// 函数内容
}
另一种是:
int main()
{
// 函数内容
return 0;
}
这种形式带有一个返回值,两种形式功能基本相同。先这样理解。
int a, b, sum;
int c = 3;
a = 1;
b = 2;
这一段对四个变量进行了定义,对三个赋了初值。
sum = a + b + c;
这一行把a,b,c三个变量的值求和存入sum变量中。
printf("sum = %d\n", sum);
这句话打印出sum的值。这次的printf使用的很特殊,前面加了"sum =" 这个字符串,打印出来的效果参考结果图片。在打印结果中,%d被sum真正的值所代替,后面会仔细讲解。
我是天花板,让我们一起在软件开发中自我迭代。
如有任何问题,欢迎与我联系。
网友评论
楼主可以对指针进行讲解一下,还有结构体啊:: ,–>等操作符
如何将c++ 打包成一个.so文件?
后面会讲吗?
那将它转化为十进制的时候要算那个0吗?