C语言学习之路-01
- 目录
- 关键字
- 数据类型
- 常量
- 变量
- 声明和定义
- 进制
- sizeof关键字
- 整型:int
- short、int、long、long long
- 字符型:char
- ASCII对照表
- 转义字符
- 数值溢出
- 实型(浮点型):float、double
- 类型限定符
- 字符串格式化输出和输入
目录
关键字
C的关键字共有32个。
- 数据类型关键字(12个)
char,short,int,long,float,double,unsigned,signed,struct,union,enum,void - 控制语句关键字(12个)
if,else,switch,case,default,for,do,while,break,continue,goto,return - 存储类关键字(5个)
auto,extern,register,static,const - 其他关键字(3个)
sizof,typeof,volatile
数据类型
数据类型的作用:编译器预算对象(变量)分配的内存空间大小。
数据类型:基本类型、构造类型、指针类型。
基本类型:整型(int、short、long)、字符型(char)、实型(浮点型:单精度实型float、双精度实型double)。
构造类型:数组类型、结构类型(struct)、联合类型(union)、枚举类型(enum)。
指针类型:char * 、int * 等。
常量
整型常量:100、200、-100、0。
实型常量:3.14、0.125 、-3.123。
字符型常量:‘a’, ‘b’, ‘l’, ‘\n’ 。
字符串常量:“a”,“ab”,“123456”。
变量
变量:在程序运行过程中,其值可以改变;变量在使用前必须先定义,定义变量前必须有相应的数据类型。
标识符命名规则:
1. 标识符不能是关键字
2. 标识符只能由字母、数字、下划线组成
3. 第一个字符必须为字母或下划线
4. 标识符中字母区分daxiaoxie
变量特点:变量在编译时为其分配相应的内存空间、可以通过其名字和地址访问相应内存。
声明和定义
声明:声明变量不需要建立存储空间。如:extern int a;
定义:定义变量需要建立存储空间。如:int a;
换句话来说,定义是声明的一种特例,但并不是所有声明都是定义。
int b; 它既是声明,也是定义。
extern int a; 只是声明,不是定义。
#include <stdio.h>
#include <string.h>
#define WEEK 7 //一周7天 声明了一个 WEEK变量,名字:WEEK ,值:7。一旦初始化,不可以修改。
int main(void)
{
int a; //定义一个变量,类型:int,名字:a。
const int b = 10; //定义了一个const 常量,名字:b,值:10。常量的值不能改变。
a = WEEK; //可以将WEEK的值赋值给a。
a = 111;
printf("a的值:%d\n",a);
return 0;
}
进制
常见的进制有二进制、八进制、十进制、十六进制。(相互可以转换!后续再详细介绍)
**当前的计算机系统使用的基本上是二进制系统,数据再计算机中主要是以补码的形式存储的。(**原码、反码、补码后续再详细介绍。)
补码特点:
1. 对于正数、原码、反码、补码相同;
2. 对于负数,其 补码为它的反码加1;
3. 补码符号位不动,其他位求反,再加1,得到原码。
在计算机系统中,数值同一用补码来存储,主要原因:
1. 统一了0的编码;
2. 将符号位和其他位统一处理;
3. 将减法运算转变为加法运算;
4. 两个用补码表示的数相加时,如果最高位(符号位)有进位,则进位被舍弃。
sizeof关键字
- sizeof不是函数,所以不需要包含任何头文件,它的功能是计算一个数据类型的大小,单位为字节。
- sizeof 的返回值为size_t;
- size_t类型在32位操作系统下是unsigned int ,是一个无符号的整数。
#include <stdio.h>
#include <string.h>
int main() {
int a = 10;
printf("a的字节长度:%d\n",sizeof(a));
size_t c = sizeof(a);
printf("c:%u\n",c);
return 0;
}
整型:int
打印格式 | 含义 |
---|---|
%d | 输出一个有符号的10进制int类型 |
%o | 输出8进制的int类型 |
%x | 输出16进制的int类型,字母以小写输出 |
%X | 输出16进制的int类型,字母以大写输出 |
%u | 输出一个10进制的无符号数 |
%p | 后续使用时,再介绍。 |
short、int、long、long long
数据类型 | 占用空间 |
---|---|
short(短整型) | 2字节 |
int (整型) | 4字节 |
long(长整型) | Windows为4字节,Linux为4字节(32位),8字节(64位) |
long long (长长整型) | 8字节 |
当一个小的数据类型赋值给一个大的数据类型,不会出错,因为编译器会自动转化。但当一个大的类型赋值给一个小的数据类型,那么就可能丢失高位。
字符型:char
字符型变量用于存储一个单一字符,在C语言中用char表示,其中每个字符变量都会占用一个字节。在给字符型变量赋值时,需要用一对英文半角格式的单引号(‘ ’)把字符括起来。
字符变量实际上并不是把该字符本身放到变量的内存单元中去,而是将该字符对应的ASCII编码放到变量的存储单元中。char本质就是一个1字节大小的整型。
字符变量的输入:
#include <stdio.h>
#include <string.h>
int main(void)
{
char ch;
printf("请输入ch的值:");
scanf_s("%c",&ch); //%c后面不要加 \n
printf("ch:%c\n",ch);
return 0;
}
ASCII对照表
转义字符
转义字符 | 含义 | ASCII码值(十进制) |
---|---|---|
\a | 警报 | 007 |
\b | 退格(BS),将当前位置移到前一列 | 008 |
\f | 换页(FF),将当前位置移到下页开头 | 012 |
\n | 换行(LF),将当前位置移到下一行开头 | 010 |
\r | 回车(CR),将当前位置移到本行开头 | 013 |
\t | 水平制表(HT),(跳到下一个TAB位置) | 009 |
\v | 垂直制表(VT) | 011 |
\ \ | 代表一个反斜线字符 ”\“ | 092 |
\ ’ | 代表一个单引号(撇号)字符 | 039 |
\ " | 代表一个双引号字符 | 034 |
\ ? | 代表一个问号 | 063 |
\0 | 数字 0 | 000 |
\ ddd | 8进制转义字符,d范围0~7 | 3位八进制 |
\ xhh | 16进制转义字符,h范围0~9,a-f, A-F | 3位16进制 |
数值溢出
当超过一个数据类型能够保存最大的范围时,数值会溢出。
实型(浮点型):float、double
浮点型变量分为:单精度浮点数(float,4字节,7位有效数字)、双精度浮点数(double,8字节,15-16位有效数字)。
类型限定符
限定符 | 含义 |
---|---|
extern | 声明一个变量,extern声明的变量没有建立存储空间 |
const | 定义一个常量,常量的值不能修改 |
volatile | 防止编译器优化代码 |
register | 定义寄存器变量,提高效率。register是建议型的指令,而不是命令型的指令,如果CPU有空闲寄存器,那么register就会生效,如果没有空闲寄存器,那么register无效。 |
字符串格式化输出和输入
字符串是内存中一段连续的char空间,以’\0’(数字0)结尾。
字符串常量是由双引号括起来的字符序列,如:“china”、“C program”、"$12.5"等都是合法的字符串常量。
printf函数和putchar函数:
scanf函数和getchar函数:
- getchar是从标准输入设备读取一个char;
- scanf通过%转义的方式可以得到用户通过标准输入设备输入的数据。