Linux学习笔记之C语言基础-----day2

编译型语言:

需要先编译再执行
C语言  -> 二进制文件

Linux C语言开发步骤:

1.编写程序
	vim filename.c 
	点击 i a o 
	点击ESC
	输入:wq
2.编译程序
	gcc filename.c 
3.执行程序
	./a.out

GCC编译器

gcc编译器:	4.6.3
C语言程序编译成可以执行的二进制程序
gcc filename.c 
-v 查看版本
-o 设定编译生成文件的名字
-E 将程序完成预处理编译
-S 将程序完成预处理、编译操作
-c 将程序完成预处理、编译、汇编操作
-Wall 编译器编译时,不优化,将警告信息全部打印 

警告:编译通过,但可能在警告处出现错误
报错:编译未通过,语法存在错误

gcc四个流程步骤:
	1.预处理
		处理C语言中和#号相关的代码
		
		1.头文件展开
			#include 
		2.宏定义替换
			#define M   50 
		3.条件编译
			满足条件的代码加入编译
			不满足条件的代码不加入编译		
		
			gcc -E filename.c -o filename.i 
	2.编译
		将C语言代码编译成汇编代码
		
		gcc -S filename.c -o filename.s 
		
	3.汇编
		将汇编代码编译成二进制代码
		
		gcc -c filename.c -o filename.o 
	
	4.链接
		将二进制代码链接成可执行文件
		gcc filename.c -o filename 

GDB调试工具

1.语法错误
2.逻辑错误

gdb调试步骤:
1.编译时加入-g选项
	gcc filename.c -g 
2.使用gdb调试程序
	gdb ./a.out 
3.gdb调试命令:
	l		查看代码
	b main	设置断点
	r		开始执行
	n		单步执行
	p		查看变量值
	s		进入某段代码中
	q		退出调试

	1.先使用l
	2.设置断点
	3.运行程序
	4.分步执行
	5.查看某个变量的值
	6.退出 

C语言:

1.基本数据类型、运算符、表达式
2.输入输出函数
3.流程控制
4.数组
5.指针
6.函数
7.构造数据类型
8.指针高级
9.函数高级
10.内存管理

进制转换:
十进制:0 1 2 3 4 5 6 7 8 9
	逢十进一
八进制:0 1 2 3 4 5 6 7
	逢八进一
十六进制:0 1 2 3 4 5 6 7 8 9 a b c d e f 
	逢十六进一
二进制:0 1
	逢二进一
	
二进制、八进制、十六进制 -> 十进制:
	对应位 * 对应位的权值再求和

十进制 -> 二进制、八进制、十六进制:
	十进制数除以进制数,得到的余数,逆序排列,则得到对应进制的数

十进制 -> 二进制转化:
	
八进制 -> 二进制转化:
	八进制一位对应二进制的三位
	
十六进制 -> 二进制转化:
	十六进制一位对应二进制的四位 


C语言在不同平台执行结果可能不同

基本数据类型、运算符、表达式

man:Linux系统帮助手册
	1.标准命令
	2.系统调用
	3.库函数
	4.设备说明
	5.文件格式
	6.娱乐
	7.杂项
	8.管理员命令		
基本数据类型:
	数据类型:
	1.基本数据类型	C语言能够直接识别的数据类型 
		1.整数类型
			short
			int 
			long 
			char 
		2.浮点数类型
			float
			double 
		3.缺省类型
			void
		4.泊尔类型
			bool
	2.构造数据类型 	先定义才能够被C语言识别的数据类型
		1.数组
		2.结构体
		3.共用体
		4.枚举	
1.整数类型:
	sizeof:可以获得变量或者数据类型在内存中所占的字节空间
	
	整数类型分为有符号类型和无符号类型:
		short		signed short 		unsigned short
		int			signed int			unsigned int 
		long		signed long 		unsigned long 
		char 		signed char 		unsigned char 
	默认为有符号类型
	
		类型名称	内存空间中字节大小	值域范围
short	短整形		2个字节				unsigned short: 0 - 65535
										signed short:  -32768 - 32767
		
int		整形		4个字节				unsigned int: 0 - 2^32 -1
										signed int:   -2^31 - 2^31 - 1

long	长整型		4个字节 			unsigned long: 0 - 2^32 -1
										signed long:   -2^31 - 2^31 - 1

char    字符型		1个字节				unsigned char: 0 - 255
										signed char: -128 - 127
		ASCII表:
			字符与二进制数的转化关系
				'a' -> 97
				'b' -> 98
				..
				
				'A' -> 65
				'B' -> 66 
				..
			32号以后的字符能够在终端显示
			32号之前的字符均用作通信控制,不能在终端显示(可能会显示出乱码)

	补码:有符号数在内存中存放的为数字的补码
		整数补码为该数本身
		负数补码需 原码->反码->补码 得到对应内存中的数
	

	32bit
		数据总线  32根 == 4个字节 
	
2.浮点数类型:
	所有浮点数类型均为有符号类型:
	float类型		单精度浮点型	4个字节 
						保存6位精度数据	
						符号位(1位)
						指数位(8位)
						尾数位(23位)
			
	double类型 		双精度浮点型	8个字节
							保存15位精度数据
							符号位(1位)
							指数位(11位)
							尾数位(52位)

3.缺省类型:
void
作为函数参数、函数返回值或修饰指针使用

4.逻辑类型:
bool _Bool
值域范围:
	true(1)		false(0)
	在C语言中非0值表示逻辑真值,0值表示逻辑假值

变量和常量:

1.常量:
	在程序运行过程中,不允许发生改变的量
	1.整形常量(均为int类型,占4字节存储空间)
	十进制常量
		123
	十六进制常量
		0x123	
	八进制常量
		0123
	123l	长整型
	123L	长整型
	
	123ul	无符号长整型
	123UL	无符号长整型
	
	2.浮点型常量(默认double类型,占8个字节空间)
	3.1415
	31415.92
	3.141592E4
	3.141592E-4
	3.141592e4
	3.141592e-4
	
	3.1415f	float类型 
	3.字符常量
	'a'						97
	'b'
	'A'
	'#'
	'!'
	' '		空格字符
	'\n'	换行符
	'\\'	\字符 
	'\t'	横向制表符
	'\v'	纵向制表符
	'\b'	退格符
	'\r'	回车符
	'\a'	响铃
	'\''	'符号 
	'0'		字符'0'		48
	'1'
	'2'
	'\0'	字符'\0'	0					
	0		int 	4		0000 0000 0000 0000 0000 0000 0000 0000
	'0'		char 	1		0011 0000
	
	'\056'	八进制56对应的字符
	'\x41'	十六进制41对应的字符
	
	4.字符串常量

	5.标识常量
2.变量:
程序运行过程中,值可以改变的量
存储
变量定义一定会开辟内存空间

变量的定义:
	存储类型 数据类型 变量名;
		
	数据类型:
		基本数据类型 short int long float double void bool 
		构造数据类型 struct union enum 
	
	存储类型:
		auto		自动型变量、局部变量(默认)
		register 	寄存器变量
		extern 		外部变量
		static 		静态变量
	
	变量名:
		1.变量名可以由字母、数字、下划线构成不能以数字开头
		2.变量名不允许与关键字重名
		3.变量名最好不要与库函数重名
		
		见名知意
	驼峰法:
		int iTmpNum;
		short sTmpNum;
		long lTmpNum;
		unsigned int uiTmpNum;
		unsigned short usTmpNum;
		unsigned long ulTmpNum;
		char cTmpNum;
		
	变量的存储类型:
		代码与变量分离
		auto:自动型存储、局部存储
		将变量存放在栈区
		
		作用域:能够使用变量的范围
		生存周期:变量从开始分配空间到空间被回收的整个过程
		
		特性:
		1.局部变量作用域在离定义该变量最近的一个大括号内可以使用
		2.局部变量生存周期在程序执行变量定义时开辟空间,到作用域结束
		  回收变量空间
		3.未经初始化前为随机值
		注意:
			不要使用未经初始化的局部变量
			
		寄存器变量
			将变量存放在CPU内部的寄存器中
			如果寄存器中存满等价于auto类型

		外部变量 
		声明:
			声明一个变量是存在的,声明该变量的类型 
			
		定义:
			定义需要开辟存储空间

		静态变量 
			1.修饰静态变量,变量未经初始化为0值,
						   编译时分配空间
						   超过作用域范围不会被回收,程序结束回收空间
			2.限定变量/函数的作用域
			3.防止多文件编程时,变量名重名		

变量初始化:
	为变量开辟空间时,对空间赋初值即为初始化
	int iTmpNum;
	
	赋值:内存空间的拷贝
	初始化 != 赋值

语句:
以;号结尾的一段代码
表达式:
由运算符连接的一个或者多个变量/常量组成的式子成为表达式
表达式一定有值

强制类型转换(显示类型转换)
double a;
(int)a;

隐式类型转化:
不同类型做数据运算和处理时,必须转化为同一种类型进行运算
	所占空间越大,精度范围越高
	unsigned > signed 
	浮点数 > 整数 
	
高	double 		<-	float
	
	unsigned 
	
	long 
	
低	int 		<-	char short 

运算符:

1.算数运算符
	+
	-
	*
	/
	%		取余(不能对浮点数操作)
	++		自增运算符
		i++	先用再加
		++i 先加再用
	--		自减运算符

	float f = 10 / 4;
	printf("f = %f\n", f);

	练习:
		定义两个变量,并对两个变量赋初值,计算这两个
		变量四则运算结果并完成打印
	
	int iNum = 0;
	int i = 1;
	
	//iNum = ++i+i++;
	iNum = i+++i;
	
	iNum ?	
	i    ?	3
	
2.关系运算符
	=		赋值运算符 
	==		关系运算符
	> 	小于
	<	大于
	==	等于
	!=	不等于
	>=	大于等于
	<=	小于等于

3.逻辑运算符
	&&	逻辑与	既..又..
	||	逻辑或	要么..要么..
	!	逻辑非  真取非得假
				假取非得真
	
	逻辑与:		
		一假为假	全真为真
	逻辑或:
		一真为真	全假为假
	逻辑非:
		真取非得假  假取非得真
	
	截断特性:
		逻辑与左边为假值,右边不再计算
		逻辑或左边为真值,右边不再计算 
	
4.赋值运算符
	=
	+=
	-=
	*=
	/=
	..
	
	数据截断:
		大数据放入小空间,直接截取数据低位
		
	数据扩展:
		小数据放入大空间,有符号数高位扩展符号位
						 无符号数高位扩0 
	
5.位运算符
	&	按位与
	|	按位或
	~   按位取反
	>>	右移		缩小
					右移n位缩小,除以2的n次方
	
	<<	左移		放大
					右移n位放大,乘以2的n次方
	
	^	按位异或	相同为0 相异为1
	
	与0得0
	或1置1 
	异或交换
	
	将一个字节Num中的第n位置1的方法:
		Num = Num | 1 << n
	将一个字节Num中的第n为置0的方法:
		Num = Num & ~(1 << n)

	C语言中变量交换:
		1.使用中间变量交换
			t = a;
			a = b;
			b = t;
		2.数学方法:
			sum = a + b;
			a = sum - a;
			b = sum - b;
		3.异或实现交换
			a = a ^ b;
			b = a ^ b;
			a = a ^ b;
		
6.特殊运算符(三目运算符)
7.逗号运算符
8.sizeof运算符

你可能感兴趣的:(Linux学习笔记之C语言基础-----day2)