变量及数据类型
variable:变量,var
char:字符,例如:’a’,’A’等
B:Byte:字节,1字节
W:Word:字,4字节
H:Half:一半
HW:HalfWord:半字,2字节
DW:DoubleWord:双字,8字节
type:类型
circle:圆
rectangle:矩形
ellipse:椭圆
radius:半径
回顾:variable:变量
char:字符,例如:’a’,’A’等
B:Byte:字节,1字节
W:Word:字,4字节
H:Half:一半
HW:HalfWord:半字,2字节
DW:DoubleWord:双字,8字节
type:类型
circle:圆
rectangle:矩形
ellipse:椭圆
radius:半径
回顾:
1.linux命令
ls/cd/pwd/clear/mkdir/touch/cat/echo/tar/cp/mv/grep/find/whoami
2.vim编辑器
三种模式,模式切换,快捷键,命令行模式下的命令
3.C语言编程基础
源文件.c/头文件.h
至少有一个源文件
至少有一个main函数
main函数形式:
int main(void)
{
return 0; //结束返回,程序执行到这里结束
}
为了用printf函数需要添加头文件
头文件包含形式两种:#include
注释形式两种:/**/,//
CPU先找main函数,一旦找到从上往下挨个每条语句执行
4.printf函数
功能:向显示器上输入信息
占位符:%d
必须包含:#include
5.C程序编译:必须用gcc编译器(翻译官)
翻译三步骤:预处理/编译/链接
C程序编译的三种方式:
gcc xxx.c
gcc -E .c -o .i
gcc -c .i -o .o
gcc -o 目标 .o
gcc -o 目标 .c
6.内存特性
研究程序最终研究程序对应的内存(排兵布阵)
概念:字节,地址,存储区,首地址
7.C语言基础之变量
7.1.问:既然程序玩的是内存,那么程序如何从内存分配存储区的空间呢?
答:通过变量来实现内存的分配(类似开房)
7.2.变量定义的语法格式:
切记:何为定义?答:定义就是分配内存
何为初始化?答:就是给变量对应的内存空间放一个数字
语法: 数据类型 变量名 = 初始值;
注意:目前掌握一个数据类型:int(整型数:0,1,2,3…),表示分配4字节内存空间
此种数据类型的占位符:%d
例如:printf(“%d\n”, 变量名);
定义变量的形式:
形式1:只定义不初始化
int var; 语义:定义变量var,本质就是让操作系统给你分配一块内存空间来存储数字
并且这块内存空间叫var名称,将来访问var名称就是在访问内存空间
并且这块内存空间的大小连续4字节,并且这4个字节的内存空间
的数字将来可以随时改变
注意:此时这块内存空间存储的是一个随机乱七八糟的数字
形式2:定义的同时并且初始化
int var = 250; //分配4字节内存空间并且同时往里面放一个250数字
形式3:定义之后再初始化
int var;
var = 250;
形式3:连续只定义多个变量
int var1, var2, var3; //定义三个变量var1,var2,var3
形式4:连续定义并且初始化
int var1 = 250, var2 = 251, var3 = 252;
形式5:连续定义多个变量之后再初始化
int var1, var2, var3;
var1 = 250;
var2 = 251;
var3 = 252;
7.3.问:变量名是否可以随意起名?
答:变量名(var)和函数名(printf)在C语言中统称标识符(用来区分,标识的符号)
标识符的名称规则:
1.不能以数字开头,第一个字符只能以字母和下划线开头,后面可以有数字
例如:int 2var; //错误
int var2; //可以
2.标识符不能用关键字(有特殊功能含义的单词)
目前掌握的关键字如下:include, int, void, main, return
例如:int int; //错误
3.要区分大小写
例如:int var 不等于 int Var;
4.采用驼峰或者下划线命名
驼峰:int nAge;
int CreateWindows
linux程序员基本采用下划线命名:int create_windows;
7.4.问:写C语言代码书写格式可以任意吗?
答:理论上随意,但是还要讲究美观
1.int main(void) {printf(“hello,world\n”); return 0;} //没毛病,太难看了
该加空格的加空格,TAB键的TAB键,对齐,缩进都有讲究,让代码看起来美观
int main(void)
{ //独占一行
printf(“….”); //一条语句占一行
return 0; //一条语句占一行
} //独占一行
2.代码编写区域建议显示器左侧2/3,如果超过了,换行写
printf(“%d %d %d %d %d %d %d %d %d”,
1, 2, 3,4,5,6,7,8,9,10);
printf(“%d %d %d %d %d %d %d”
“%d %d %d %d %d %d %d\n”,
1, 2, 3,4,5,6,7,8,9,10);
8.变量的数据类型
8.1.数据类型的作用:让编译器gcc预算变量将来要分配的内存大小
不同的数据类型将来分配的内存大小不一样
8.2.C语言的基本数据类型:
关键字 含义 分配内存大小 数字范围
char 字符类型(本质单字节的整数) 1字节 -128~127(背)
unsigned char 无符号单字节整数 1字节 0~255(背)
short 双字节整数 2字节 -32768~32767
unsigned short 无符号双字节整数 2字节 0~65535
int 四字节整数 4字节 -2^31 ~2^31-1
unsigned int 无符号四字节整数 4字节 0~2^32-1
long 四字节整数 4字节 -2^31 ~2^31-1
unsigned long 无符号四字节整数 4字节 0~2^32-1
long long 八字节整数 8字节 -2^63 ~2^63-1
unsigned long long 无符号八字节整数 8字节 0~2^64-1
float 单精度浮点数 4字节 很大
double 双精度浮点数 8字节 很大
8.3.有符号和无符号之分
1)每种数据类型都有有符号和无符号之分
2)有符号数据有正负之分,可以用signed关键字来修饰,也可以不用写
例如:
int var = 250;
等价于
signed int var = 250;
3)无符号数据只有0和正数,必须用unsigned关键字修饰
unsigned int var = 250;
8.4.切记:unsigned int和unsigned long
对于32位/64操作系统,unsigned int分配的内存就是4字节
对于32位操作系统,unsigned long分配的内存就是4字节
对于64位操作系统,unsigned long分配的内存就是8字节
结论:如果将来用一个变量来保存内存的某个地址,一定要用unsigned long
后续指针课程再来理解!
8.5.基本数据类型详解之char(字符)
常量:其值不可改变,例如:250
1)字符常量用单引号’’括起来,例如:’A’,’a’
区分大小写
2)本质:字符类型的变量对应的内存本质上存储的就是字符常量对应的一个整数(数字)而已,
这个数字有对应的专业术语叫ascii码
说明:字符和整数之间可以互转
例如:
字符 整数
‘A’ 65
‘B’ 66
‘a’ 97
‘b’ 98
… …
所以:’d’-‘a’ = 本质就是 100-97=3
3)字符类型变量的占位符:%c,%d
例如:
char c = ‘A’; //表面看定义字符变量c并且初始化为字符常量’A’
//看清本质:就是分配1字节内存空间,并且往这个内存空间放了一个数字65
printf(“c = %c\n”, c); //打印输出按字符格式输出,c=’A’
printf(“c = %d\n”, c); //打印输出按照整数格式输出,c=65
4)转义字符(特殊字符)
1 | '\n':换行符,将光标移动到下一行的行首 |
8.6.基本数据类型详解之整型数据类型(int)
1)int特点:
int代表2字节或者4字节整数
可以用short或者long进行修饰,最终得到6大形势,也就是上面表格的内容
2)int的六种形式:
1.short (int)用2字节表示,有符号 //这里意思是 int可不加
例如:
short int a = 250;
等价于
short a = 250;
2.unsigned short (int)用2字节表示,无符号
例如:
unsigned short int a = 250;
等价于
unsigned short a = 250;
3.long (int)用4字节表示,有符号
例如:long int a = 250;
等价于
long a = 250;
4.unsigned long (int)用4字节表示,无符号
例如:unsigned long int a = 250;
等价于unsigned long a = 250;
5.int用4字节表示,有符号
例如:int a = 250;
6.unsigned int用4字节表示,无符号
例如:unsigned int a = 250;
long long也能修饰int
long long int 就是long long
8.7.整型常数(细腻,高薪)
100:gcc编译器默认当成int类型
100L:gcc编译器当成long类型
100LL:gcc编译器当成long long类型
100u:gcc编译器当成unsigned int类型
100UL:gcc编译器当成unsigned long类型(最爱)
用途:用于后期课程的数据类型的转换用
8.8.基本数据类型详解之浮点数类型
float/double
例如:
1.23:gcc编译器默认当double类型,8字节
1.23f:gcc编译器当float类型,4字节
注意:浮点数在计算机中都是近似值(差不多得了)
例如:1.23实际是1.2300001
8.9.数据类型和占位符之间的故事
数据类型 占位符
char %c(字符显示)和%hhd(整型数显示)(这个更精确)
%d 是int 的占位符 ,老师把它和字(word)扯上关系,那64位系统中%d岂不是占八位???
另外:没有%hhhd
unsigned char %c(字符显示)和%hhd(整型数显示)
short %hd
unsigned short %hu
int %d
unsinged int %u
long %ld
unsigned long %lu
float %f或者%g
double %lf或者%lg
%f,%lf和%g,%lg区别在于前者会保留后面多余的0,后者不会保留
回滚现象:
类型的整型数范围(正向超出范围):
char为例
-128~127
如果要求输出128,则整型数回滚为0;
类似的其他类型可类推
类型的数据溢出范围情况(负向超出范围)
unsigned char为例
对于unsigned char 0-255是范围
如果要求输出-1,则实际输出256(unsigned char的实际范围大小)-1 结果为255
实际上也和正向超出范围类似,-1是负向超出,回滚到右边第一个,也就是255,上面是便捷的计算方法而已
8.10.掌握sizeof关键字(而不是函数)
1)作用:计算一个变量或者一种数据类型所占用的内存空间大小,会给你一个大小结果
单位是字节
2)格式:sizeof(变量名或者数据类型名),返回字节数
例如:int a = 250;
printf(“sizeof(a)的大小是%d\n”, sizeof(a));
printf(“sizeof(a)的大小是%d\n”, sizeof(int));
3)切记:sizeof关键字后面的小括号里对任何存储区内容的修改都是无效的
8.11.输入函数:scanf
1)已经掌握了输出函数:printf
2)输入函数scanf功能:能够让用户从键盘给程序输入数字并且保存到变量中(保存到内存中)
3)格式:scanf(格式串, 变量的地址列表);
例如:
int a, b;
scanf(“%d%d”, &a, &b); //从键盘上输入两个数分别给a和b,按照整型数的形式输入
//键盘输入:100 200
或者:
scanf(“%d,%d”, &a, &b); //键盘输入:100,200
4)注意
1.为了使用此函数,必须添加头文件:#include
2.scanf函数双引号里面不要包含占位符以外的其他内容
3.如果一次要输入多个数字,每个数字之间用空格键(帅的人)或者TAB键或者换行键隔开