目录
常量
定义:描述一些固定的数据,不能改变的数据
常量的分类:
整型常量
二进制
八进制
十六进制
实型常量
单精度float
双精度double
字符型常量
char
字符串常量
用双引号引起来的就是字符串常量
#include
int main() {
// 整型常量
10;
// 实型常量(小数)
// 单精度float/双精度
// 注意默认情况下都是双精度的实型常量也就是所有小数都是默认double
10.1; // 双精度double
88.8; // 双精度double
5.2f; // 单精度float
// 字符型常量,用单引号扩起来的就是字符型常量
// 注意:字符型常量只能写一个字符,写多个会报错除了\r,\n,\t,\f,\\,\',\'',\ddd
'a'; // 字符型常量
'ab'; // 错误
'1';
‘12’;
‘1’; // 这个是么?
// 字符串型常量,用双引号引起来的就是字符串常量
// 注意:无论你用双引号l括起来几个字符,只要是使用双引号扩起来就是字符串常量
"abc";
"a"
return 0;
}
变量
什么是变量
表示的数据可以经常被修改,当一个数据的值不确定,或者经常被修改的时候就应该用变量来表示
比如说:游戏积分,页码
如何定义变量
申请一块存储空间,也就是定义一个变量
定义变量的格式,数据类型,变量名称
定义一个基本数据类型的变量(int,float,double,char)
int number; // 定义一个n名称叫做number的变量,会在内存空间中开辟一块给number,用于存储数据
int value; // 再开辟一块空间给value
![image-20200506235143526](/Users/mac/Library/Application Support/typora-user-images/image-20200506235143526.png)
连续定义变量
int number1,number2; // 连续开辟两个存储空间分别给number1,number2
如何往变量对应的存储空间中存储数据呢?
注意:变量中不能随便的存储数据,只能存储与之对应的数据,也就是说之前申请内存空间为int类型,那就只能存储int类型,如果存储float,double会出一些问题
int number;
number = 2; // 这时候会把数据2这个值放在申请好了的number的存储空间中
变量的第一次赋值称之为初始化
要想使用变量都必须先对变量进行初始化,然后才能使用
如果不对变量进行初始化,那么其实变量存储的就是一些垃圾数据
如何使用变量
要使用占位符
int number = 10;
printf("%i",number);
变量初始化的两种方式
// 初始化的两种方式
// 1,先定义再初始化赋值
int value1;
value1 = 10;
// 2,定义的同时初始化
int value2 = 10;
完全初始化
// 完全初始化
int value3, value4;
value3 = value4 = 10; // 把10赋值给value4,再把value4的值赋值给value3
int value3,value4;
value4 = 10;
value3 = value4;
部分初始化
// 部分初始化
int value5,value6 = 10; // 开辟两个存储空间value5,value6,将10的值赋值给value6,但是value5并没有给赋值
如何修改变量的值
int number = 10; // 定义并初始化一个变量number,将10的值赋值给number
number = 20; // 将20的值赋值给变量number,此时number的内存空间没有是10,只有20了。它只能存一个值
变量之间的值传递
int number = 10; // 定义并初始化一个变量number,将10的值赋值给number
int number1 = number; // 将number的值赋值给number1,此时会先去找number这个变量的内存地址,找到内存地址取出存的值,将这个值赋值给number1
连续赋值
int a,b,c; // 定义并初始化三个变量a,b,c
a = b = c = 10; // 将10的值赋值给c,再将c的值赋值给b,再将b的值赋值给a
如何查看变量的值(简单用法)
// int类型
int number = 10;
printf("number的值是%i",number) //使用%i
// float类型
float FloatNumber = 20.0f; // float类型要加上f标示,默认是double类型的
printf("FloatNumber的值是%f",FloatNumber) // 使用%f
// double类型
double DoubleNumber = 30.01234567890;
printf("DoubleNumber的值是%lf",DoubleNumber) //使用lf,longfloat
printf("DoubleNumber的值是%.10lf",DoubleNumber) // printf函数默认强制输出小数点后6位,想要输出双精度的需要指定你要输出小数点后面几位
// char类型
char CharNumber = 'a';
printf("CharNumber的值是%c",CharNumber) // 使用%c
变量的作用域
c语言中所有变量都有自己的作用域,根据作用域的不同分为局部变量和全局变量。
int main(){
a = 10;
int a ; // 变量的作用域是从定义的哪一行开始,到大括号结束,报错
return 0; // return 代表函数的结束,只要执行到这里就代表这个函数结束了
}
例如:把变量放在rerurn后面执行--报错
int main(){
int number;
number = 10;
return 0 ;
printf("%i",number); // 此时number在return的后面,number的作用域也就消失了
}
例如:不同函数之间的变量作用域是不一样的,不能相互调用的
int call(){
int number;
return 0;
}
int main(){
number = 10;
printf("%i",number); // 此时在main函数中调用call函数中的变量number,会报错。number在call函数中,他的作用域之存在于call的函数内存空间中。
return 0;
}
例如:在同一函数中,函数的嵌套时,内层函数可以使用外层函数的变量,外层函数不能使用内层函数的变量
int main(){
int number;
{
number = 10;
printf("%i",number);// 此时可以正常打印,外层中number时遇到她所在的内存空间,他和{printf("%i",number)}是同一级别的
}
return 0;
}
int main(){
{
int number;
number = 10;
}
printf("%i",number); // 此时是错误的,number的变量存储在{}中,并不在main()函数中
return 0;
}
例如:变量查找的顺序(第一种)
如果自己的作用域中有就使用自己的
不同的作用域中可以定义相同的变量名称
统一范围内不能出现同名的变量
int main(){
int number;
{
int number = 20;
printf("%i",number); // 20,变量名称相同,先查找本内存空间的变量number也就是20
}
printf("%i",number); // 0,因为在此内存空间中有number的变量,但是并没有初始化所以是0,也可能是其他的数字,随机的
return 0;
}
变量的内存分析
内存和字节的关系
每块内存都是连续的
每块内存的大小都是一样的
合理的分配内存会节省很多空间
一个变量所占用的内存空间,不仅跟变量的类型有关系,还跟编译环境有关系
同一个变量类型在不同的编译环境下所占用的存储空间是不一样的-这就是我们要定义变量类型的原因(优化存储空间)
内存由大到小寻址
// 内存空间分析
int main(){
// 内存寻址从大到小,按照这种规则那么先定义的变量内存地址肯定比后定义的要大
int number = 0;
int value = 0;
printf("number的内存地址是%p\n",&number); // 使用%p占位符,&符号就可以获取变量的内存地址,打印出来的是16进制
//a, b, c, d, e, f
//10, 11, 12, 13, 14, 15
printf("value的内存地址是%p\n",&value);
return 0;
}
变量存储单元的第一个字节地址就是该变量的地址
任何变量在存储空间都是二进制存在的
标签:10,常量,int,number,C语言,printf,变量
来源: https://www.cnblogs.com/shanshan-test/p/12850024.html