一:C语言
(一)linux基本操作
(1)gcc编译的四个过程
作用:预处理主要前面处理带“#”的指令,如#include、#define等,还要删除注释,添加行号和文件名标识
作用:编译过程是把预处理完的文件进行一系列的词法分析、语法分析、语义分析及优化后生成相应的汇编代码文件
作用:将代码转换成机器可以执行的指令
作用:链接库,生成可执行文件
(2)文件类型
d-目录文件
-:普通文件
b-二进制文件(二进制可执行的程序)
s-套接字文件
c-字符文件
v-块文件
(3)进制
① 二进制
以0b开头
101=1 * 2^2+0 * 2^1+1 * 2^0=5
②十进制转二进制
1、倒除取余法(适用于数值较小的数)
2、凑数法(适用于数值较大的数)
③八进制
0开头
八进制的一位等于二进制三位
八进制转十进制:按位权展开和
八进制--通常用来表示文件的权限
④十六进制
十六进制--通常用来表示一个地址
1(0-9,a-f)
0x开头
十六进制的一位等于二进制四位
八进制转十六进制--先转成二进
(二)数据类型
(1)Int char short long float double
①char ---占一个字节(1Byte==8bit)
修饰字符
取值范围:
无符号---0~255(0-2^8-1)
有符号--0代表正数,1代表负数
-128~127
符号位不参与计算
计算机存储数据一定是以补码的形式存储
源码:数据本身的二进制数
反码:源码取反
补码:反码+1
+:0-127
-:-128 ~ -1
unsigned signed
②short---短整型,占2个字节==16bit
取值范围:0-2^16-1
修饰整型的数据
③int ---整型,占4个字节==32bit
取值范围:0-2^32-1
④long--长整型--如果是64位系统,占8个字节,32位占四个字节
⑤float--浮点型(单精度)--占四个字节==32bit
保留小数位6-7位
⑥double--双精度--占8个字节
保留小数位15-16位
(2)标识常量 宏定义
#define M 3
(3)static---静态存储
作用:
修饰局部变量,延长生命周期
修饰全局变量,限制作用域,只能再本文件使用
修饰函数,限制作用域
(4)extern--调用外部文件--只能修饰全局变量
(5)自加操作
注:在赋值时前加与后加有所不同
{A=0;
B=A++;
B=0,A=1;}
{ A=0;
B=++A;
B=1,A=1;}
(6)逗号运算符
a=(1,2,3);
a==3;
(7)逻辑运算符
1、逻辑与
(表达式1)&&(表达式2)
全真为真,有假为假
2、逻辑或
(表达式1)||(表达式2)
全假为假,有真为真
!!!注意:如果表达式1就为真,不会执行表达式2,直接执行下面的代码
3、逻辑非
!(表达式)
真假互换
(三)输入与输出
(1)位运算:
!!!每一位都要去运算
1、位与:&
逻辑:全1为1,有0则0
2、位或:|
逻辑:全0为0,有1则1
3、取反:~
10互换
4、异或:^
逻辑:相同为0,不同为1
①用异或使两个数交换
a=a^b;
b=a^b;
a=a^b;
②第一位的清零与置一操作
1.清零
a&(~(1<<1))
2.置一
a|(1<<1)
(2)格式控制符:
%d---以整型的形式输出
%f----以小数形式输出
%e---以指数形式输出
%c--以单个字符输出
%s--以字符串输出
%%---%
%x--以十六进制形式输出
%#---显示进制形式输出
%o--以八进制形式输出
%u--以无符号的十进制输出
%*c---抑制符
转义字符:
\n--换行
\t---制表
\r---回车
\ '--'
\ "---"
\ \ ---\
修饰符:
m---域宽--%md
m为正数是右对齐,负数为左对齐,如果超过域宽,就原样输出
.n--限制小数位
会自动四舍五入
(四)控制语句
计算机执行我们的程序,一定从上往下一行一行执行,顺序执行控制语句就是用来改变计算机的这种顺序执行,按照我们想要的顺序去执行,比如,循环,分支,跳转等
选择语句
switch(表达式)---一般为常量表达式
{
case 表达式1:语句块1;break;
case 表达式2:语句块2;break;
case 表达式3:语句块3;break;
case 表达式4:语句块4;break;
......
default :语句块n; }
(五)数组
(1)选择排序
(2)冒泡排序
(六)指针
(1)普通变量
int a;
int *p=&a;
(2)一维数组
int a[10]={11,22,33,44,55};
int *p=a;
*p+1=12
*(p+1)=22
*p=11
*p++=11
*p=22
(*)p++=22
*p=23
(3)二维数组
①指针数组
char a[3][6]={ "hello","world","nihao"};
char *p[6];
p[0]=a[0];
printf("%c\n",*(p[0]+2));//打印的第0行的第2个元素
printf("%s\n",*a);//打印第0行所有的内容
printf("%s\n",*(a+1));//打印第1行所有的内容
printf("%s\n",*a+1);//从第0行第一个开始打印
printf("%s\n",a[0]+1);//
printf("%c\n",*(*a+1));//打印的第0行第一个字符
printf("%c\n",*(*a+1)+1);
②数组指针
int main(int argc, char *argv[])
{
char a[3][6]={ "hello","abcde","world"};
char (*p)[6]=