终端快捷键
mkdir文件名,可以创建文件夹
cd 文件名,可以跳转到该目录下
cd .. 跳至上级目录 .当前目录 ~用户主目录 -上次目录
Vim * -p该目录下文件一块编辑
Cp 目录1/ 目录2 -r 把目录1下的文件拷贝到目录2
touch 文件名 创建文本文件
gcc *.c编译全部.c文件
tab 补全
rmdir 目录/ 删除目录
Ls -l查看文件的权限
vim快捷键
yy复制
p粘贴
gt多文件跳转
:wqa多文件全部退出
:n调转下一个页
:N跳转到上一个页
C语言数据类型
类型转换:隐式,默认精度高。Char+int =int
显式
不同形式的0值:0,‘0’,“0”,‘\0’
常量:整型,实型,字符(‘a’'\015'转义字符),字符串(“axv”),标识(#define)
变量:【存储类型】 数据类型 标识符 = 值;
数据类型:基本数据类型/构造数据类型
【存储类型】auto:默认型,自动分配回收
register 寄存器型,只是建议系统,只能局部变量,32位数据类型
static:静态型,自动初始化为0或空值,其值有继承性
extern:说明型,不能改变被说明变量的值和类型
声明周期:
局部变量和静态局部变量对比:局部变量
[tom@CentOS7 ~]$ vim auto.c
-----------------------------------------------
#include <stdio.h>
#include <stdlib.h>
void func(void)
{
int x = 0;//局部
x = x + 1;
printf("%p->%d\n",&x,x);
}
int main()
{
func();
func();
func();
}
------------------------------------------------------
[tom@CentOS7 ~]$ make auto
cc auto.c -o auto
[tom@CentOS7 ~]$ ./auto
0x7ffd69a83b7c->1
0x7ffd69a83b7c->1
0x7ffd69a83b7c->1
-------------------------------------------------------
静态局部变量,继承性
#include <stdio.h>
#include <stdlib.h>
void func(void)
{
static int x = 0; //静态局部
x = x + 1;
printf("%p->%d\n",&x,x);
}
int main()
{
func();
func();
func();
}
------------------------------------------------------
[tom@CentOS7 ~]$ make auto
cc auto.c -o auto
[tom@CentOS7 ~]$ ./auto
0x601030->1
0x601030->2
0x601030->3
全局变量Vs局部变量:
int i = 100;
func(int i)
{
printf("[%s]i=%d\n",__FUNCTION__,i);
}
int main()
{
printf("[%s]i=%d\n",__FUNCTION__,i);
int i = 3;
func (i);
{
printf("[%s]i=%d\n",__FUNCTION__,i);
}
}
----------------------------------------------------------------
[tom@CentOS7 ~]$ make auto
cc auto.c -o auto
[tom@CentOS7 ~]$ ./auto
[main]i=100
[func]i=3
[main]i=3
[main]i=3
static修饰全局变量:方便项目合作时,每个人写的不同模块的全局变量因为重名而冲突,static全局变量只在本模块有效。
例子静态变量
[tom@CentOS7 ~]$ mkdir miniproj
[tom@CentOS7 ~]$ cd miniproj
[tom@CentOS7 miniproj]$ touch main.c proj.c proj.h
[tom@CentOS7 miniproj]$ vim main. proj.c proj.h
Main.c:
#include <stdio.h>
#include <stdlib.h>
#include "proj.h"
static int i = 10;
int main(void)
{
printf("[%s]i=%d\n",__FUNCTION__,i);
func();
exit(0);
}
~ ~
Proj.c:
#include <stdio.h>
#include <stdlib.h>
#include "proj.h"
static int i =100;
void func (void)
{
printf("[%s]:i=%d\n",__FUNCTION__,i);
exit(0);
}
~
~
Proj.h:
#ifndef PROJ_H___
#define PROJ_H___
void func(void);
#endif ~
[tom@CentOS7 miniproj]$ gcc *.c
[tom@CentOS7 miniproj]$ ./a.out
[main]i=10
[func]:i=100
静态函数不能在头文件声明(因为静态static会限制函数的作用范围),若要调用先写一个主调函数并声明后,主调函数在被调之下。
Main.c:
#include <stdio.h>
#include <stdlib.h>
#include "proj.h"
static int i = 10;
int main(void)
{
printf("[%s]i=%d\n",__FUNCTION__,i);
Call_func();
exit(0);
}
~
Proj.c:
#include "proj.h"
static int i =100;
static void func (void)
{
printf("[%s]:i=%d\n",__FUNCTION__,i);
exit(0);
}
void Call_func(void)
{
func();
}
Proj.h:
#ifndef PROJ_H___
#define PROJ_H___
void Call_func(void);
#endif
#include <stdio.h>
#include <stdlib.h>
#include "proj.h"
static int i = 10;
int main(void)
{
printf("[%s]i=%d\n",__FUNCTION__,i);
Call_func();
exit(0);
}
~
Extern 不是变量定义,是可扩展外部变量的作用域,不能改变其类型和值
[tom@CentOS7 ~]$ cp miniproj/ minproj_extern -r
[tom@CentOS7 ~]$ cd minproj_extern/
[tom@CentOS7 minproj_extern]$ vim * -p
还有 4 个文件等待编辑
Main:
#include <stdio.h>
#include <stdlib.h>
#include "proj.h"
int i = 10;
int main(void)
{
printf("[%s]i=%d\n",__FUNCTION__,i);
func();
exit(0);
}
~
Proj.c:
#include <stdio.h>
#include <stdlib.h>
#include "proj.h"
extern int i ;
void func (void)
{
printf("[%s]:i=%d\n",__FUNCTION__,i);
exit(0);
}
Proj.h:
#ifndef PROJ_H___
#define PROJ_H___
void func(void);
#endif
[tom@CentOS7 minproj_extern]$ gcc *.c
[tom@CentOS7 minproj_extern]$ ./a.out
[main]i=10
[func]:i=10
运算符
位运算:<< , >> , | 或, &与 ,^异或:不同为1 , ~取反。其中|,&的优先级较低
例子1:Int I = B 1100 = 12; i >> 1得到 110=6 ; 110<<1得到1100 =12
例子2:1100 & 1001 = 1000; 1100 | 1001=1101 ; 1100^1001 =0101
意义:把操作上A的第n位置1: A = A | 1 << n
把操作数A的第n位置0: A = A & ~(1<<n)
测试操作数第n位: if ( A & 1<< n)
逻辑运算符: !非
&&与,都对才对,左边错则右边不再运算。
||或,一个对就对。
三目运算符:A ? B : C
求字节运算符: sizeof();
强制类型转换 a=(int)b;