C语言第二天
gcc编译器
常用编译参数:
-
gcc常用参数 效果 -E 只显示预处理结果到终端 -std = gnu99 设置c99语法标准 -c 只编译不连接 -o 指定编译结果的名字 -S 生成汇编代码 -I 指定头文件的加载路径 -Wall 尽可能多地产生警告 -Werror 把警告当成错误处理 -i 指定要加载地代码库 例如:-im使用数学库
C代码变成可执行文件的详细过程
- 预处理 把源文件翻译成预处理文件
- gcc -E code.c 显示预处理结果到终端
- gcc -E code.c -o code.i 生成.i结尾预处理文件
- 编译 把预处理文件翻译成汇编文件
- gcc -S code.i 生成.s结尾的汇编文件
- 汇编 把汇编文件翻译成二进制文件
- gcc -c code.s 生成.o结尾的目标文件
- 链接 把若干个目标文件合并成一个可执行文件
- gcc a.o b.o c.o … 默认生成a.out可执行文件
C语言的文件类型
.c | 源文件 |
---|---|
.h | 头文件 |
.h.gch | 头文件的编译结果文件,会被优先使用 |
.i | 预处理文件 |
.s | 汇编文件 |
.o | 目标文件即二进制文件 |
.a | 静态库文件 |
.so | 共享库文件 |
存储空间的单位
- Bit 比特 一个二进制位,只能存储0或1,计算机中存储数据的最小单位
- Byte 字节 八个二进制位,计算机存储器描述存储容量的基本单位
- KB 1024字节
- MB 1024KB
- GB 1024MB
数据类型
为什么要进行数据分类
- 现实生活数据自带类别属性
- 对数据分类可以节约空间,提高运行速度.
C语言中的数据分类
- 自建 程序员自己设计的类型: 结构 联合 类
- 内建 C语言自带的类型
- 整型:
1.
- 整型:
2.浮点型: 有小数部分的类型
float 单精度 4
double 双精度 8
long double 12/16
小数点后六位有效,运算时间远大于整型.
3.模拟型:
字符型:char 字符就是符号或者图案,在计算机中存储为整数.根据ASCII码转换.
布尔型:bool, 使用需要加头文件<stdbool.h>.非零值为真(true),零为假(false).
变量与常量
变量的输入与输出
类型占位符: 表示传递变量的类型
signed char short int long long long
%hhd %hd %d %ld %lld
unsigned %hhu %hu %u %lu %llu
float %f
double %lf
char %c
int printf(const char *format,…)
功能:打印数据
format:双引号包含的提示信息和占位符
…:变量名
返回值:
int scanf(const char *format,…);
功能:输入数据
format:双引号包含的占位符
…:变量名地址列表
返回值:成功输入的变量的个数
常量: 程序运行期间不能改变的值
100 默认 int 类型
100l long
100ll long long
100u unsigned int
100lu unsigned long
100llu
3.14 浮点数默认double
3.14f float
3.14l long double
格式化输入与输出
%nd 显示n个字符宽度 不够补空格,右对齐,多了不限制,
%-nd 显示n个字符宽度 不够补空格,左对齐
%0nd 显示n个字符宽度 不够补0,右对齐
%n.mf 显示n个字符宽度, 不够补空格,左对齐,m表示小数点后几位,不够补零,四舍五入.
%g 不显示小数点后多余的零.
运算符 | 效果 |
---|---|
自变运算符 ++/– | 使变量的值自动加一减一 |
前自变 ++/–num,后自变 num++/– | 不要在一行多次使用自变用算符 |
算数运算符 + - * / % | |
关系运算符 | |
逻辑运算符 | |
自变运算符 | |
自变运算符 | |
自变运算符 |
-
使用运算符要注意运算规则和优先度
-
算数用算符 + - * / %
- 整数/整数 结果只能是整数
- 10/3 -->3
- 10%3 -->1
- / % 除数不能为0;会产生运行错误.
- 整数/整数 结果只能是整数
-
关系运算符
- > < >= <= == !=
- 比较结果 0 或 1,可连续参与运算.
- 例如:n = -1; 10< n < 20;结果为真;
- 比较结果 0 或 1,可连续参与运算.
- > < >= <= == !=
-
逻辑运算符: && || !
- 取反优先级比较高
- 把运算对象转换成逻辑值,0转换为假,非0转换成真—??
- A && B 一假全假 运算结果 也是0,1;
- A || B 一真全真
- 短路特性
- && 的优先值大于||
- ! 求反
-
三目运算符
- A ? B : C A为真则执行B,否则执行C
-
赋值运算符
- a += 10;
-
位运算符
- .
分支语句
-
if(表达式1)
{
表达式为真(非零),执行此处代码
}
else if(表达式2)
{
code…
}
else
{
}