Linux c语言
Posted 子羽丿
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux c语言相关的知识,希望对你有一定的参考价值。
Linux c语言
统一声明:
博客转载 声 明 : 本博客部分内容来源于网络、书籍、及各类手册。
内容宗旨为方便查询、总结备份、开源分享。
部分转载内容均有注明出处,如有侵权请联系博客告知并删除,谢谢!
百度云盘提取码:统一提取码:ziyu
C语言源码下载地址:https://download.csdn.net/download/qq_43498137/22171766
可见本文末尾 代码案例详情!
一、Linux基础
1.1、Linux环境搭建
1.4.1、Linux环境搭建
如果没有Linux环境先安装虚拟机和Ubuntu
转载 最新超详细VMware虚拟机下载与安装 链接:https://blog.csdn.net/qq_40950957/article/details/80467513
转载 VMware虚拟机安装Linux系统(详解版) 链接:http://c.biancheng.net/view/714.html
Ubuntu系统 下载 链接:https://cn.ubuntu.com/download
Ubuntu低版本可能不能上网下载,可以推荐我配置好的 Ubuntu 64_20.04 可上网高版本,直接解压打开使用VM打开即可。
Ubuntu 64_20.04 阿里云链接:https://www.aliyundrive.com/s/DWUDBP5KZsU
Ubuntu 64_20.04 百度云链接:https://pan.baidu.com/s/1OEYYSHQ1eTVJE-iHjWb7WQ
1.2、Linux基础
打开ubuntu
普通用户:farsight 密码:1
超级用户:root 密码:1
/:根目录
~:家目录 == /home/farsight
$:命令提示符 普通用户 #超级用户
打开终端:
直接点击图标 terminal
快捷键:ctl+alt+t //打开新终端
右键:open terminal //再打开
ctrl+shift+n //打开
ctrl+shift+t //并列打开,打开一个标签
调节字体:ctrl+shift+‘+’ //调大字体
ctrl+‘-’ //调小字体
1.3、终端命令
终端命令:
pwd:显示当前所在的路径
ls :查看当前目录下的文件
ls -a:显示隐藏文件
ls -l:显示目录的详细信息
drwxrwxr-x 11 farsight farsight 4096 Jul 31 2020 desktop
d:目录文件,文件夹
rwx rwx r-x:文件权限
11 :文件的硬链接数
farsight:用户组名
farsight:用户名
4096:文件大小 以 字节为单位
Jul 31 2020:文件创建时间
desktop:文件名
clear :清屏操作 快捷键:ctl+‘l’
mkdir+文件名 :创建一个新的目录文件
mkdir -p:递归创建
cd :跳转
. :当前目录
.. :上级目录
touch:创建一个普通文件,一般加后缀
更新时间戳
mv 文件名1 文件名2 //将文件重命名为文件名2
mv 文件名1 路径 //移动文件到路径下
文件路径不同,起到移动的作用,文件名在移动后的路径下没有,文件路径相同,重命名
rm:删除普通文件
-r:删除目录文件
mdir:安全删除空文件,非空时警告
man 手册
man 1:普通命令
man 2:系统调用
man 3:库函数
绝对路径:从根目录出发,一直到指定的目录
相对路径:相对于当前位置
gedit test//类似于文本文档
cat:查看文件内容
-b:加行号显示
-s:合并多空行
cp 文件名1 文件名2 //复制普通文件1到文件2
-r 文件名1 文件名2//复制目录文件1到目录文件2
练习:
1、用相对路径的方式,切换到上一级的上一级目录
cd ./../../ cd .. cd ..
2、用绝对路径的方式,切换到根目录下的usr下的include目录
cd /usr/include
3、在家目录下创建一个school,再在该目录下创建两个目录 class1 class2
mkdir -p school/class1 school/class2
4、在class1中创建两个普通的文件
touch day1.txt test.txt
二、vi编辑器
2.1、vi编辑器
vi编辑器:
刚进入时在命令行模式下:
进入插入模式(进行编辑):
i o a I O A
i:从光标的当前位置开始编辑
a:从光标的后一个位置开始编辑
o:从光标的后一行位置开始编辑
I:从光标当行 第一个位置开始编辑
O:从光标当行 前一行位置开始编辑
A:从光标当行 最后一个位置开始编辑
回到命令行模式:Esc
进入底行模式:shift+“:”
:w //进行保存
:q //退出
:wq //保存并退出
:x //保存并退出
:q!//强制退出
:wq!//强制保存并退出
命令行模式下:
dd //删除光标所在行
ndd //删除光标向下的n行
yy //复制光标所在行
nyy //复制光标向下的n行
p //粘贴到光标所在的下一行或下一个
P //(大写P)粘贴到光标所在的前一行或前一个
r //改变光标所在的字符,只改变一次
R //改变光标所在的字符,Esc退出
x //剪切或删除光标所在的一个字符
X //剪切或删除光标所在的前一个字符
s //删除光标所在的字符,并进入插入模式
S //删除光标所在的行,并进入插入模式
u //撤销
ctrl+r //反向撤销
底行模式:
:s/str1/str2 //将str1替换成str2 替换光标所在行的第一个
:s/str1/str2/g //将str1替换成str2 替换光标所在行的所有
:%s/str1/str2/g //将str1替换成str2 替换全文
:%s/str1/str2 //将str1替换成str2 替换全文第一个
:n,ms/str1/str2 //将str1替换成str2 替换n到m行的第一个
:n,ms/str1/str2/gc //将str1替换成str2 替换n到m行的第一个
:n,my //复制n到m行
:n,md //删除n到m行
:set number //显示行号
:set nonumber //隐藏行号
vi/vim 文件不存在时会自动创建
2.2、GCC编译工具
GCC编译工具:
gcc test.c //默认生成a.out可执行文件
gcc test.c -o test //将生成可执行文件命名为test
gcc -o test.c test
编译运行的四个步骤:预处理、编译、汇编、链接
预处理:处理头文件、宏定义等,不进行错误检查
gcc -E test.c -o test.i
编译:将预处理的文件进行处理,检查错误,生成汇编文件
gcc -S test.i -o test.s
汇编:将汇编文件编译生成机器语言 二进制文件
gcc -c test.s -o test.o
链接:生成可执行文件
gcc test.o -o test
2.3、存储器
存储器:用来存放程序和数据。
程序和数据在计算机中都是以二进制的形式存放存储器中
存储容量的大小是以字节为单位度量,经常用KB、MB、GB、TB
1KB = 1024B 1GB = 1024KB 1TB = 1024G
(1)存储器分为内存储器(主存储器)和外存储器(辅助存储器)
内存 在计算机中,直接和运算器、控制器交换信息
容量小、存取速度快
外存 间接和cpu联系,存放一些必须使用但又不急于使用的程序和数据
程序必须调入内存中才能执行
程序:系统可以识别的指令。存储在 磁盘上 ,执行时 从磁盘 到内存 再到寄存器 最后被cpu执行
三、C语言基础
3.1、基本c语言程序结构
#include<stdio.h> //预编译命令
int main(void)//主函数名 int 函数返回类型
{
return 0;//返回值 必须和函数数据类型匹配
}
return 0;//默认 正常结束
return -1;// 异常结束
数值数据:
数制的数:按位权展开的多项式的和
3.2、进制之间的转换
(1)十进制
基数:10 (0 1 2 3 4 5 6 7 8 9)
位权:数字权位的大小
eg:123 = 1*10^2+2*10^1+3*10^0
3 10^0 位权:1
2 10^1 10
1 10^2 100
(2)二进制
一般形式:0b111000
基数:2 (0 1)
位权:101 = 1*2^0+0*2^1+1*2^2 = 5
xx1 : 2^0 位权:1
x0x : 2^1 位权:2
1xx : 2^2 位权:4
1 2 4 8 16 32 64 128 256 512 1024
二进制转十进制:每一位数乘位权 相加
十进制转二进制:a:短除法 b:凑数法
(3)八进制:
一般形式:01101000
基数:8 (0 1 2 3 4 5 6 7 )
位权:1 8 64 512
eg:0101
八进制转十进制:1*8^0+0*8^1+1*8^2+0*8^3 = 65
十进制转八进制:a:短除法 b:凑数法
八进制转二进制:a:一位八进制 转成 三位二进制
eg:0234 0b 010 011 100
b:先转成十进制 再转成二进制
(4)十六进制
一般形式:0x110101
基数:16 (0 1 2 3 4 5 6 7 8 9 A B C D E F)
位权:1 16 256
十六进制转十进制:按位权相加
十六进制转二进制:a:一位十六进制 转成 四位二进制
eg:0x234 0b 0010 0011 0100
二进制转十六进制:四位二进制转成一位十六进制
eg: 0b0001 1001 0100 0x194
二进制:0b
八进制:0
十六进制:0x
位(bit):计算机中存储数据的最小单位
字节(Byte):存储容量的度量单位,数据处理的基本单位
1个字节的存储空间 称为 一个存储单元
1Byte = 8 bit
ubuntu 32位 ----4字节
计算机中非数值数据
printf("hello!\\n");
ASCII码:
0 null('\\0')
10 '\\n'
48 '0'
65 'A'
97 'a'
122 'z'
32 空格
‘A’--->'a' 'A'+32
'9'--->9 '9'-'0' '9'-48
词法符号:程序设计语言中有若干字符组成的有意义的 最小语法单位
3.3、关键字
按作用分类:关键字、标识符、分隔符、运算符、标点符号
关键字:32个
auto:声明自动变量 一般不使用
double:声明双精度的变量或函数
int:声明整型的变量或函数
struct:声明结构体变量或函数
break:跳出当前循环
if:条件语句 肯定分支
else:条件语句 否定分支
long:声明长整型的变量或函数
switch:用于多分支
case:开关语句分支
enum:声明枚举类型
register:声明寄存器变量
typedef:用来给数据类型取别名
char:声明字符型的变量或函数
extern:看成引用
return:子程序中返回语句(可以带参数,也可以不带)
union:声明联合数据类型
const:声明只读变量
float:声明浮点型的变量或函数
short:声明短整型的变量或函数
unsigned:声明无符号类型的变量或函数
continue:结束当前循环,开始下一轮循环
for:一种循环语句
signed:声明有符号类型的变量或函数
void:声明函数无返回值或无参数,声明无类型的指针
default:开关语句的其他分支
goto:无条件的跳转
sizeof:计算数据类型的长度
volatile:声明变量在程序中可以被隐含的改变
do:循环语句中的循环体
while:循环语句中的循环条件
static:声明静态变量
3.4、数据类型
基本数据类型:char、short、int、long、float、double
存储类型(有符号、无符号):signed、unsigned、static、register、extern、const、volatile、auto
语句:if、else、for、while、do、goto、switch、case、default、break、continue、return
构造:union、struct、enum、
求字节:sizeof
取别名:typdef
空类型:void
3.5、标识符
程序员按照命名规则自行定义的词法符号
命名规则:
1、由字母、数字、下划线(_)组成
2、不能和关键字重名
3、只能由字母或下划线开头
标识符的命名方式:
见名知意
骆驼命名法:混合大小写字母构成变量名或函数名
小驼峰:
常用于变量
eg:myFirstName
大驼峰(帕斯卡命名法):
常用于类名、函数名
eg:DataBaseUser
下划线命名法:
eg:print_students_count();
linux下严格区分大小写!
3.6、分格符
空格 ‘ ’ 32
换行 ‘\\n’ 10
制表符 '\\t' 9
注释:1、/*提示信息,注释一段内容*/
2、//注释一行内容
3、#if 0
中间内容被注释
#else
中间内容正常执行
#endif
#if 1
中间内容正常执行
#else
中间内容被注释
#endif
3.7、运算符
运算符:算数、关系、逻辑、位
根据操作数不同,分为单目运算符、双目运算符、三目运算符(?:)
算术运算符:+ - * / % ++ --
注:i++和++i的区别
关系运算:< > >= <= != ==(判断是否相等)
int a = 3;
int b = 4;
(a>b) 0
(a<b) 1
(a!=b) 1
(a==b) 0
逻辑运算符:&&(与) ||(或) !(非)
逻辑:0 为假,非0 为真
&&:两边为真才为真,只要有一边为假就为假
||:只要有一边为真,就为真
两边为假才为假
!:真假互换
位运算:&(按位与) |(按位或) ~(按位取反) ^(异或) <<(左移) >>(右移)
异或:相异为1 相同为0
左移:右边补0 右移:左边补0
1110 0101 << 2 1001 0100 1110 0101 >> 2 0011 1001
位运算的一般用法:对指定位清0 置1
//位运算的位置从0 开始计数
(1)对指定位清0
eg:对i的第2位清0 i=i & ~(1<<2)
(2)对指定位置1
eg:对i的第5位置1 i=i | (1<<5)
赋值运算符:= += -= *= /= %= ^=
int a = 3;
int b = 4;
a += b ===> a = a+b
a -= b ===> a = a-b
a *= b ===> a = a*b
其他运算符:自增 自减
a++ ==> a=a a+1
++a ==> a+1 a=a
a-- ==> a=a a-1
?: & * [] sizeof()
标点符号:
, ; () {}
3.8、数据类型
数据类型:
基本数据类型:(在没有写明时,默认有符号)
int 整型:在内存中占4字节
unsigned int范围:0~2^32-1
0000 0000 0000 0000 0000 0000 0000 0000
1111 1111 1111 1111 1111 1111 1111 1111
//10000 0000 0000 0000 0000 0000 0000 0000 -1
signed:(有符号数,将数据的第一位看做符号位,0表示正数,1表示负数)
signed int 范围:-2^31~2^31-1
0000 0000 0000 0000 0000 0000 0000 0000 //+0
0111 1111 1111 1111 1111 1111 1111 1111 //+2^31-1
1000 0000 0000 0000 0000 0000 0000 0000 //-2^31
1111 1111 1111 1111 1111 1111 1111 1111//-(2^31-1)
char字符型:在内存中占1字节(特殊的整型)
字符:用单引号引起来的一个字符(ASCII码) 'a' '1'
unsigned: 无符号 正整数
unsigned char范围:0~255
1111 1111
0000 0000
signed:(有符号数,将数据的第一位看做符号位,0表示正数,1表示负数)
signed char范围:
0 000 0000 //+0
0 111 1111 //+127
1 000 0000 //-128(-0无意义)
1 111 1`在这里插入代码片`111 //-127
short:短整型 在内存中占2字节
long:长整型 在内存中占4字节 (32位操作系统) (64位中占8字节)
long long:长长整型 在内存中占8字节
float:单精度浮点型(实型) 在内存中占4字节
用于展示小数,有效位数6~7位
double:双精度浮点型(实型) 在内存中占8字节 有效位数15~16位
3.9、变量
局部变量:
在函数内部(花括号{}内部定义的变量)
作用域:模块(函数内部) (从定义开始位置,到函数结束)
生命周期:模块(函数)调用后结束
如果未初始化,系统随机赋值
全局变量:
在函数外部(花括号{}外部定义的变量)
作用域:整个程序 (从定义开始位置,到程序结束)
生命周期:程序结束
系统默认初始化为0
正数:
原码:数据的二进制
反码:还是原码
补码:还是原码
负数:
原码:数据的二进制
反码:符号位不变,其他位取反
补码:反码+1(原码取反加1)
变量的存储形式(以补码的形式存储)
常量: 在程序运行中 始终不变的
(1)整型常量(十进制数、八进制数、十六进制数)
(2)实型常量a:小数形式 eg:3.14
b:指数形式 eg:12.34*10^3 ===> 12.34e3 e、E表示指数的底数10
注:e前面要有数字 e后面必须是整数
(3)字符常量:计算机内部按照ASCII码进行存储和处理
a:普通的字符:用单引号界定
eg:'a' 'A' '3' '#'
b:转义字符: 用\\将字符 原本的含义 赋予新的含义
eg:'\\n'
(4)符号常量:一般用在程序的开头,用预处理指令定义
#define 符号名 常量数据
eg:#define PI 3.14159
PI 就是符号常量 程序中,定义后的任意地方,都可用PI表示3.14159
注:符号名 符合命名规则 一般大写
变量:在程序中可以改变的数据(用户自定义)
必须先定义才使用
定义的一般形式:<存储类型><数据类型><变量名>
存储类型:(4G虚拟内存空间)
auto static register extern
auto:自动类型 栈区
auto int a;====> int a;
static:静态存储, 静态存储区(全局变量区)
只要程序一直运行,static修饰的变量就一直存在
register:寄存器类型,存放在寄存器的存储空间
效率高、可加快程序运行的速度
extern:外部引用(全局区)
赋值:
初始化:
int a = 10;
一般:int a;
a = 10;
3.10、输入输出
格式输出函数:(加头文件 #include <stdio.h>)
printf("字符"); //原样输出
printf("%格式控制符",指定的数据);//以固定的格式输出指定的数据
%d %c %s %f %p %%
%c //字符类型
%d //十进制整数
%x //十六进制无符号整数
%o //八进制无符号整数
%u //无符号十进制整数
%s //字符串
%e //指数形式浮点小数
%f //小数形式浮点小数
转义字符:用\\将字符原本的意义改变 赋予新的含义
\\n //换行
\\t //水平制表符
\\0 //空
\\v //垂直制表符
\\f //换页
\\b //退格
\\\\ //代表一个反斜线字符‘\\’
\\' //代表一个单引号字符
\\“ //代表一个双引号字符
\\ddd //1到3位八进制数所代表的任意字符
\\xhh //1到2位十六进制数所代表的任意字符
格式修饰符:
m %md //输出指定域宽,数字的长度>m,原样输出,小于m,左补空格
n %.nf //限制浮点数的小数位数(四舍五入)
# %#x //显示进制前的提示符0x 0
格式输入函数:
scanf("格式控制符",输入位置的地址);
格式控制符:%d %c %s %f
修饰符:m //指定域宽
l //双精度或长整型
h //短整型
* //抑制符
scanf 输入以上是关于Linux c语言的主要内容,如果未能解决你的问题,请参考以下文章
我的C语言学习进阶之旅解决 Visual Studio 2019 报错:错误 C4996 ‘fscanf‘: This function or variable may be unsafe.(代码片段
我的C语言学习进阶之旅解决 Visual Studio 2019 报错:错误 C4996 ‘fscanf‘: This function or variable may be unsafe.(代码片段