C语言是非常重要的一门程序设计语言,学好C语言再去学习其他编程语言将变得很轻松,因为大部分语言的都有相同的共性存在。本节我们来讲解一下C语言中的基本数据类型,掌握如何使用变量以及变量在编程中的作用及重要性,学会区分变量的存储类型,学会如何声明并初始化变量,了解字符和数值之间的不同。
1. 内存
在学习变量之前,我们先来了解一下计算机内存的一些基本知识,了解计算机内存能很好地帮助理解C编程
- RAM随机存储器,通常位于计算机内部,具有易失特性,RAM只能在计算机运行时保存信息,计算机掉电后丢失。
- 每台计算机都需要一定容量的RAM硬件支持。在计算机系统中,用字节(Byte)表示RAM的大小
- 1GB=1024MB,1MB=1024KB,1KB=1024B
- 字节是计算机数据存储的基本单位,在计算机中RAM是按顺序逐字节排列的,每个字节都有唯一的地址(即我们常说的内存地址)。地址按顺序付给内存地址,一直增长到内存的最大值。
- 了解了内存地址有助于C编程中理解变量的存储及所占用的内存空间大小。在编程中出现问题时方便我们知道如何去查找问题,而不是一头雾水。
2. C代码规范
说到变量就不得不说变量的命名,说到变量命名就不得不说编程中代码的规范问题。虽然在C编程中变量命名是有一定自由的,但是为了我们编写的代码具有可读性、友好性、可维护性,在开始进行编程时,就要养成良好的编程习惯,按照程序的规范去编写代码。具有良好的编码规范和习惯能很好的减少编程中出现不必要的错误。下面我们说一下基本的编码规范。
变量命名
在C编程中使用变量,我们首先就是要知道如何创建和命名变量。C语言中的变量必须遵循以下规则
- 变量名由字母(a-z,A-Z)、数字(0-9)、下划线组成(_)
- 变量名的第一个字符必须为字母和下划线
- C语言区分大小写,Test和test是两个不同的变量
- C语言中的关键不能用作变量,因为关键字是C语言的一部分
- 一般C编译器不允许变量的命名字符无限长,一般不超过31个
#include <stdio.h>
int main(int argc, char const *argv[])
{
/* 变量定义 */
int iTest; // 合法
int itest; // 合法
int iTest1; // 合法
int iTest_1; // 合法
int _iTest; // 合法
int 1iTest; // 非法
return 0;
}
函数命名
定义函数时一般用单词表示函数的作用,并且每个单词首字母大写。这是作者习惯性用法,不是必须的。
例如:
代码语言:javascript复制
int TestAddTwoNumber(int iA, int iB)
{
return (iA iB);
}
注释
程序中代码的注释是为了做说明,方便理解代码的功能。良好的代码注释能给人更好的阅读感,并且方便其他人进行代码的维护。C编程中代码的注释有//和/**/两种
- // 木荣君本人习惯做单行注释
- /**/ 木荣君本人习惯做多行注释
3. 数值类型
C语言中有多种不同的数值变量,不同类型的数值变量需要不同的内存空间,而且占用的内存空间也不尽相同。选用合适的变量类型,可以使程序的运行效率提高。
C语言中的数值变量基本上分两大类:
- 整型变量,存储没有小数部分的数值,分为有符号和无符号变量。有符号变量可以存储正负值,无符号变量只能存储正值和零。
- 浮点型变量:存储带有小数部分的值
下面看一下C语言的数值数据类型
关键字 | 类型 |
---|---|
char | 字符 |
short | 短整型 |
int | 整型 |
long | 长整型 |
long long | 长长整型 |
unsigned char | 无符号字符 |
unsigned short | 无符号短整型 |
unsigned int | 无符号整型 |
unsigned long | 无符号长整型 |
unsigned long long | 无符号长长整型 |
float | 单精度浮点型 |
double | 双精度浮点型 |
- 不同的数值变量类型所占内存大小不同,依不同的计算机平台而有差异。下面我们看一下在64位的ubuntu上数值变量类型的大小。
#include <stdio.h>
int main(int argc, char const *argv[])
{
printf("sizeof(char) = %lun", sizeof(char));
printf("sizeof(short) = %lun", sizeof(short));
printf("sizeof(int) = %lun", sizeof(int));
printf("sizeof(long) = %lun", sizeof(long));
printf("sizeof(long long) = %lun", sizeof(long long));
printf("sizeof(unsigned char) = %lun", sizeof(unsigned char));
printf("sizeof(unsigned short) = %lun", sizeof(unsigned short));
printf("sizeof(unsigned int) = %lun", sizeof(unsigned int));
printf("sizeof(unsigned long) = %lun", sizeof(unsigned long));
printf("sizeof(unsigned long long) = %lun", sizeof(unsigned long long));
printf("sizeof(float) = %lun", sizeof(float));
printf("sizeof(double) = %lun", sizeof(double));
return 0;
}
变量声明
在C程序中,要想使用变量,前提是必须先声明。
变量声明
就是告诉编译器变量的类型和名称,建议在声明变量时进行指定初始值。这样做是有好处的,因为变量不指定初始值,会默认赋值随机值。
变量的声明格式如下:typename varname
typename:指定变量的类型 varname:指定变量名
例如:
代码语言:javascript复制 int iVar1,iVar2;
int iVar2;
int iVar4;
float fVar5;
double dVar6;
变量初始化
代码语言:javascript复制上面提到了声明变量时如果不进行指定初始值,系统会随机赋一个随机值。所以在声明变量时进行赋值初始值。
int iVar1 = 0, iVar2 = 1;
int iVar2 = 1;
int iVar4 = -1;
float fVar5 = 0.1;
double dVar6 = 1.2;
- 注意,赋值变量初始值时不能超过变量的表示范围。如果超过范围编译可以通过,但是程序运行时可能发生意想不到的问题。
4. 常量
常量
与变量类似,但是与变量不同的是存储在常量中的值在程序运行中是不可改变的。C语言中有两种类型的常量:字面常量
和符号常量
。
字面常量
代码语言:javascript复制 int cnt = 20;
float rate = 0.51
- 20和0.51都是字面常量,上面的声明是将这两个字面常量分别存储在cnt和rate中。其中,20不带小数点的字面常量是整型常量,0.51是带小数点的字面常量是浮点型常量。C编译器将没有小数点的常量认为整型常量,带有小数点的常量为浮点型常量。
符号常量
代码语言:javascript复制程序中,用常量名来表示符号常量。与字面常量一样,程序运行时也不能改变符号常量。符号常量的好处是为编码和阅读带来便利性。
#include <stdio.h>
#define PI 3.14 // 定义符号常量
int main()
{
double dRes = 2.PI;
printf("%lfn", dRes);
return 0;
}
5. 变量的存储类型
C编程中可以选择变量的不同存储形式,分为静态存储和动态存储。可以通过存储类型修饰符来告诉编译器是什么类型的变量。
静态存储和动态存储
静态存储是指程序运行分配的固定存储方式,而动态存储则是在程序运行期间动态分配存储空间。
- auto变量 修饰一个局部变量为自动的,就是每次执行到该变量时,就会产生一个新的变量。如果不加auto关键,默认也是自动变量。
- static变量 修饰为静态变量,static变量在语句执行期间始终保持它的值,并且初始化只在第一次执行时起作用,在随后的执行中保持上一次执行时的值。
- register变量 称为寄存器变量。把某个局部变量存放在计算机的硬件寄存器而不是内存中,这样可以提高程序的运行效率。实际编程中用处不大。
- extern变量 为外部存储变量,extern声明程序中用到的在其他地方定义的变量。
/* 文件1 */
#include <stdio.h>
int main()
{
extern int a;
printf("a = %dn", a);
return 0;
}
/* 文件2 */
#include <stdio.h>
int a = 100;
那么上述结果打印输出a = 100;
总结
本节阐述了有关变量和常量的基本内容,以及如何在程序中使用变量。最后介绍了变量的存储类型,掌握这些基本的知识是C编程所应该具备的能力。希望通过本节对你有所帮助。最重要的是我们要学会从编写代码中去理解这些知识,不要纸上谈兵,要学会操练起来。