变量和数据类型
所有定义的变量都存在内存中,定义变量需要内存空间,不同类型的变量需要的内存空间是不同的
数据类型作用:告诉编译器,我这个数据在内存中需要多大的空间,编译器预算对象(变量)分配的内存空间大小。
1.常量与变量
1.1 常量
常量:程序运行中不能改变的量
- 整型常量:1 200
- 字符常量: 'c'
- 字符串常量:"hello"
- 实型常量(浮点型常量):3.14,0.125
整型常量 | 100,200,-100,0 |
---|---|
实型常量 | 3.14 , 0.125,-3.123 |
字符型常量 | ‘a’,‘b’,‘1’,‘\n’ |
字符串常量 | “a”,“ab”,“12356” |
1.2 变量
1. 变量的空间大小
变量:程序运行中可以被改变的量,存在于内存中
- 变量需要定义,变量的定义:在内存中开辟空间,告诉编译器我有这个变量(声明),变量定义的本质:在内存中开辟空间,给这个空间取名**
- 数据类型 变量名(数据类型告诉编译器占多大的空间)
- int类型在内存中占4字节
- short类型在内存中占2字节
- long类型,在windows中都是4字节,linux中,32位系统4字节,64位系统8字节
- char类型在内存中占1个字节
- float类型在内存中占4字节,用于存储小数(float精度能达到7位小数)
- double类型在内存中占8字节(double精度能达到15位小数)
char short int long都可以用来存储整数
int a; // 在内存中定义了一个变量a,占int类型大小4个字节
char b; // 在内存中定义了一个变量b,占一个字节
2. 变量的命名规则
- 定义变量时,变量名必须以字符和下划线开头,不能以数字开头
- 变量取名不能为关键字
- 变量取名的时候要顾名思义
- 变量定义时要区分大小写
变量定义的本质:在内存中开辟空间,给这个空间取名 - extern 数据类型 变量名--告诉编译器有这个变量,但是这里不开辟空间
int num;
num = 100;
//int num = 200; 定义变量并且初始化
printf("num = %d\n", num);
return 0;//成功完成
extern short SUM; // extern 告诉编译器我有这个变量,没有定义,不能进行赋值
// 声明有SUM,并没有开辟空间,只有在定义的时候开辟空间
// 定义可以在其他.c文件中定义变量或者main函数外的位置等
#define MAX 10 // MAX相当于一个常量
MAX = 100; // 报错,MAX是一个常量,常量不可以被更改
3. 变量的特点
- 变量在编译时为其分配相应的内存空间
- 可以通过其名字和地址访问相应的内存
4. 声明和定义的区别
- 声明变量不需要建立存储空间,如:extern int a;
- 定义变量需要建立存储空间,如:int b;
#include <stdio.h>
int main()
{
//extern 关键字只做声明,不能做任何定义,后面还会学习,这里先了解
//声明一个变量a,a在这里没有建立存储空间
extern int a;
a = 10; //err, 没有空间,就不可以赋值
int b = 10; //定义一个变量b,b的类型为int,b赋值为10
return 0;
}
从广义的角度来讲声明中包含着定义,即定义是声明的一个特例,所以并非所有的声明都是定义:
- int b 它既是声明,同时又是定义
- 对于 extern b来讲它只是声明不是定义
一般的情况下,把建立存储空间的声明称之为“定义”,而把不需要建立存储空间的声明称之为“声明”。
#include <stdio.h>
#define MAX 10 //声明了一个常量,名字叫MAX,值是10,常量的值一旦初始化不可改
int main()
{
int a; //定义了一个变量,其类型为int,名字叫a
const int b = 10; //定义一个const常量,名为叫b,值为10
//b = 11; //err,常量的值不能改变
//MAX = 100; //err,常量的值不能改变
a = MAX;//将abc的值设置为MAX的值
a = 123;
printf("%d\n", a); //打印变量a的值
return 0;
}
1.3 关键字
1.4 const修饰的变量
const关键字修饰的变量不能被更改
#include <stdio.h>
int main()
{
int a; //定义了一个变量,其类型为int,名字叫a
const int b = 10; //定义一个const常量,名为叫b,值为10
//b = 11; //err,常量的值不能改变
return 0;
}
const修饰的变量b,告诉编译器,不能通过b(变量名)修改这块空间的内容,但是可以通过地址进行修改