linux C语言基础学习总结

article/2025/9/22 9:29:17

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 一、思维导图
  • 二、linux基础
    • 1.常用命令
    • 2.vim编辑器
    • 3.gcc编辑器
  • 三、C语言
    • 1.基础
      • (1).进制
      • (2)词法符号
      • (3)基本数据类型
    • 2.基础语句
      • (1).注释
      • (2)输入输出
      • (3)选择语句
      • (4)循环语句
    • 3.数组
      • (1)一维数组
      • (2)二维数组
  • 4.函数
  • 总结

一、思维导图

在这里插入图片描述

二、linux基础

1.常用命令

常用命令:
ls (查看目录下的文件)		mkdir(创建空目录)
touch(创建空文件)			
pwd(查看绝对路径)			chmod(强制修改文件文档权限)
Sudo(零时赋予管理员权限) 	cd(打开目录)

目录:最开始的‘/’ == 根目录
‘~’ ==家目录
一个点 ‘.’ ==当前目录
两个点 ‘··’ ==上一目录
/mnt/hgfs/AAA/yuan == 绝对路径
./yuan ==相对路径
linux文件共享目录:/mnt/hgfs

2.vim编辑器

Vim常用的一些配置
1.安装中文输入法,详情请查看CSDN牛逼大佬的文章2.显示行数
永久显示行数:  终端输入vim ~/.vimrc里面是一个空白文档,
在里面插入内容:set nu=====>>保存退出即可
临时显示行数:set nu3.自动缩进
在配置文件输入:set tabstop=4
:set softtabstop=4
:set shiftwidth=4
:set expandtab

当然也可以直接白嫖大佬写好的配置文件让你的编程体验爽到飞起

在这里插入图片描述

Vim  文件名				进入vim编辑器的命令模式
编辑器下存在两种模式
1.命令模式:
	常用命令:Shift+:型命令,底行模式w					保存q					退出wq					保存并退出x					保存并退出q!					强制退出wq!				强制保存并退出%s/str1/str2/g		将str1替换成str2行操作yy			复制行nyy			复制n行p		    	咱贴dd			删除ndd			删除n行u			撤销一步按下i、a、o进入插入模式
2.插入模式
按esc退出到命令模式

3.gcc编辑器

gcc 编译器编译器编译链接的四个步骤main.c====>>main.i====>>main.s====>>mian.o====>>main.out预处理		  编译 	      汇编        链接      源文件	   预编译文件  汇编文件	  目标文件	   可执行文件预处理	:gcc -E main.c -o main.i编译	:gcc -S main.i -o main.s汇编	:gcc -c main.s  -o test.o链接	:gcc  main.o -o main 一步到位命令:gcc mian.c -o main.out    gcc main.out(默认生成a.out)
打开执行文件:./main.out(打开当前目录下的main.out文件)

三、C语言

1.基础

(1).进制

1)	 十进制		decimal			   10
2)	 二进制		binary			   1010
3)	 八进制		octonary		   012
4)十六进制		hexadecimal		   0xc

(2)词法符号

1) 关键字  		编译器内定的,不需要加任何头文件C语言中的关键字: 32个auto           break           case           char        const    continue       default         do             double      else    enum           extern          float          for         goto    if             int             long           register    return    short          signed          sizeof         static      struct    switch         typedef         union          unsighed    void    volatile       while
2)标识符  		自定义符号,变量(可为字母数字下划线,不能由数字开头)
定义变量:		存储类型	数据类型		变量名
存储类型:auto 		自动 由编译器根据定义的位置 自动分配内存位置 register    寄存器类型   extern  	引用类型   变量不是在当前位置定义的, 用于引用其他位置(在				其	他文件中)定义的一个变量 const 	    常量类型   数据存放的位置 在 内存的常量区|代码段static      静态类型   数据存放的位置 在 内存的 静态区 
3) 运算符
特殊的运算符——三目运算符(表示非此即彼的关系)
条件表达式?语句1:语句2;
4) 分隔符  		空格 回车 用于代码的 美观 增强可读
5) 标点符号  	参与编译 ,C语言的标点符号有严格要求 

在这里插入图片描述

(3)基本数据类型

1.数据存储

 位   1bit    ==0|1
字节   bytes  == 8bit
千字节    kb  ==1024byte
兆字节    Mb  ==1024kb······

2.基本数据类型1)整型(精确)bool		    1bit      0|1char			1byte     short		    2byteint			    4bytelong			8byte2)浮点型(非精确)float			4byte     6	(有效数据位,精确到几位)double			8byte     15(有效数据位,精确到几位)

要点:ASCLL码
要记住,’0’=48 ‘A’=65 ‘a’=97 空字符=0
在这里插入图片描述

2.基础语句

(1).注释

1)单行注释			//我是单行2)多行注释			
/*···     我是多行···*/#if 0
我是多行
为0时注释,为1时执行,非常建议使用这种方式
#endif

(2)输入输出

(基于标准输入/输入c库,stdio.h)
1.输入putchar(char);  puts(str);printf();  printf("格式控制字符串",变量等 );	格式化输出如:printf("c=%d\n",c);格式声明	占位符%+格式字符%d : 数据按 10进制 整数方式输出 %c : 数据按 字符方式输出 %s : 数据按 字符串方式输出 %x : 数据按 16进制格式输出%o : 数据按 8进制格式输出%f : 数据按 浮点数格式输出 %e : 数据按 指数格式输出 %% : 输出 '%' 字符 %.2f(精确小数点后两位)	%-4d(字符宽度为4,左对齐)转义字符\n		换行\r		回车\0		空字符\\      字符'\'
2.输出getc(stdin);  //从终端读取一个字符gets(); 	  //从终端读取字符串   该函数不是安全的 fgets();	  //从终端读取字符串  以\n 作为结束符  scanf();      // 格式化输入

(3)选择语句

if()语句1;else ()语句2if()语句1;else if()语句2;else if()语句3;······switch(n)//多分支语句,执行多选一操作
{case 1:  语句块1 ; break;case 2:  语句块2 ; break;case 3:  语句块3 ; break;...default:  语句块n;
}switch(n)//多分支语句,若n=2,则执行语句2,语句3
{case 1:  语句块1 ; break;case 2:  语句块2 ; case 3:  语句块3 ; default:  语句块4;
}

(4)循环语句

1)结构:do{语句块;}while(条件表达式);while(条件表达式){语句块;}for( 循环量的初始化;循环条件; 循环递推){循环体语句块;}2)循环控制语句: 	break;   // 跳出循环, 提前结束整个循环 continue;// 继续   本次循环的后续 步骤不在执行, 重新开始新的循环return;  // 结束函数goto;    // 跳转到指定 位置继续执行 

3.数组

(1)一维数组

结构存储类型  元素数据类型  变量名[元素个数];定义及初始化int arr1[3]={0,1,2};	//全部赋初值 int arr2[]={0,1,2};		//全部赋初值时,可省略元素个数  	 int arr3[3]={};			//初值为空,即全部赋值为0int arr4[3]={1};		//部分赋值,即未被赋值的自动赋值为0char str1[]="hello";char str2[]={'h','e','l','l',o'};char str3[]={'h','e','l','l',o','\0'};str1==str3;他们均为字符串数组,字符串数组结尾必须有'\0'字符串处理函数(基于string.h头文件)
			#include<stdio.h>#include<string.h>char str1[]="hello",str2[]="Hello",str3[]="hello",str4[10];int main(){printf("%d\n",strlen(str1));		//求字符串长度printf("%d\n",strcmp(str1,str3));	//比较字符串printf("%d\n",strcmp(str1,str2));printf("%d\n",strcmp(str2,str1));printf("%s\n",strcat(str2,str1));	//字符串追加printf("%s\n",strcpy(str4,str1));	//字符串复制return 0;}

(2)二维数组

	二维数组的定义和表示: int arr[2][5];存储类型	基本数据类型  数组名[行数][列数];二维数组的初始化:char str[2][10]={"hello","world"};int arr[2][5] = {{1,2,3,4,5} ,{ 10,9,8,7,6}};arr[0]			arr[1]

4.函数

#include<stdio.h>
static int num=4//全局变量,静态区、全局区
int fun1_find_max(int a,int b,intc)		//形式参数
{int max,count=4;				//局部变量if(a>b&&a>c)max=a;else if(b>a&&b>c)max=b;else if(c>a&&c>b)max=b;return max;					//返回值,max即为整个函数的值
}int main(){int max;max=fun1_find_max(15,7,9);		//实际参数不需要写数据类型printf("max=%d\n",max);printf("num=%d\n",num);		//printf("count=%d\n",count);		//count未定义return 0;
}

总结

linux C语言其实就是在linux系统下编写C代码,使用vim或者vi编辑器编写代码,再使用gcc编译器编译链接,使用起来更偏向底层,若你使用集成开发环境编写代码,是隐藏了底层逻辑的。
本章节重点内容还是C语言基础,linux只是一个工具而已。数据类型,基本的语句等等,有几个比较容易忽视的知识点就是,全局变量、局部变量,主要考察数据存储类型,因为平时写代码都不会定义数据存储类型,所以在这一块还要深入学习。
当然这只是linuxC语言基础,后期学习的指针、结构体、链表才是重点以及难点。在这个一提到程序员就能与“中年危机”挂钩的时代,唯有终生学习才能立于不败之地,能何况是小白白呢,“路漫漫其修远兮,吾将上下而求索”。


http://chatgpt.dhexx.cn/article/lVH5na1k.shtml

相关文章

查看linux系统语言并修改

查看当前系统语言 登陆linux系统打开操作终端之后,输入 echo $LANG可以查看当前使用的系统语言。如 查看安装的语言包 查看是否有中

ADMM算法系列1:线性等式或不等式约束下可分离凸优化问题的ADMM扩展

1 研究背景 交替方向乘数法&#xff08;ADMM&#xff09;最初由Glowinski和Marrocco提出&#xff0c;用于解决非线性椭圆问题&#xff0c;它已成为解决各种凸优化问题的基准算法。在方法上&#xff0c;可以认为ADMM算法是在经典增广拉格朗日方法&#xff08;ALM&#xff09;的分…

Matlab代码:ADMM算法在考虑碳排放交易的电力系统最优潮流中的应用

Matlab代码&#xff1a;ADMM算法在考虑碳排放交易的电力系统最优潮流中的应用 关键词&#xff1a;交替方向乘子法&#xff0c; ADMM &#xff0c; 最优潮流 &#xff0c;碳排放&#xff0c; 分布式优化 仿真软件&#xff1a;Matlab软件调用cplex求解器进行求解 程序主要内容&am…

张量ADMM算法

ADMM被广泛用在张量中&#xff0c;下篇是找到的一篇文章&#xff1a; 从等式约束的最小化问题说起&#xff1a; 上面问题的拉格朗日表达式为&#xff1a; …

MATLAB代码:基于分布式ADMM算法的考虑碳排放交易的电力系统优化调度研究

MATLAB代码&#xff1a;基于分布式ADMM算法的考虑碳排放交易的电力系统优化调度研究 关键词&#xff1a;分布式调度 ADMM算法 交替方向乘子法 碳排放 最优潮流 参考文档&#xff1a;《A Distributed Dual Consensus ADMM Based on Partition for DC-DOPF with Carbon Emission …

对偶算法与ADMM算法

学习笔记&#xff0c;仅供参考&#xff0c;有错必纠 转载自&#xff1a;机器学习与运筹优化&#xff08;六&#xff09;对偶算法与ADMM算法 文章目录 摘要ADMM算法参考文献 摘要 上文我们介绍了约束优化问题和拉格朗日对偶思想。对偶算法就像是男生女生互相挑选&#xff0c;最…

【配电网优化】基于串行和并行ADMM算法的配电网优化研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

MATLAB代码:全面ADMM算法代码,实现了三种ADMM迭代方式 参考文档:《基于串行和并行ADMM算法的电_气能量流分布式协同优化_瞿小斌》

MATLAB代码&#xff1a;全面ADMM算法代码&#xff0c;实现了三种ADMM迭代方式 关键词&#xff1a;综合能源 分布式协同优化 交替方向乘子法 最优潮流 参考文档&#xff1a;《基于串行和并行ADMM算法的电_气能量流分布式协同优化_瞿小斌》 仿真平台&#xff1a;MATLAB 主要内容&…

ADMM算法在神经网络模型剪枝方面的应用

文章目录 前言1. 交替方向乘子法2. 论文中的表述3. 对论文中的公式进行推导4. 代码流程5. 主要函数实现6. dense vs. prune(finetune)结束语 前言 本篇博客记录一下自己根据对论文 GRIM: A General, Real-Time Deep Learning Inference Framework for Mobile Devices based on …

ADMM算法及其放缩形式,在压缩快照成像重建的图像重建论文中的公式推导

刚接触图像恢复问题&#xff0c;简单记录一下最近看论文刚弄懂的一个小问题 ADMM算法 ADMM&#xff08;交替方向乘子法&#xff09;是一种解决变量可分离凸优化问题的简单算法&#xff0c;具有求解速度快&#xff0c;收敛性能好的特点。ADMM可以将原问题转换为几个子问题&…

开漏输出和推挽输出的区别?

《《《《正文》》》》》 《理解三极管的原理》 如下图&#xff0c;以NPN三极管为例&#xff1a; 它是一种电流控制型元器件&#xff0c;即基极B的输出输出电流可以实现对元器件的控制。所以可以进一步理解为基极B为控制端&#xff0c;集电极C为输入端&#xff0c;发射极E为输出…

推挽输出和开漏输出

推挽输出&#xff08;push-pull&#xff09;&#xff1a; 推挽输出&#xff08;push-pull&#xff09;&#xff1a; 推挽输出&#xff0c;正如字面上的意思&#xff0c;有“推”&#xff0c;也有“挽”&#xff0c;推挽输出电路运用两个MOS管构成&#xff0c;上面为P-MOS&…

推挽输出和开漏输出详解

序言&#xff1a; 平时&#xff0c;写程序的时候总遇IO口模式的端口配置。但是从来没有仔细研究过具体到底是什么含义。作为一名嵌入式工程师应该是不合格的&#xff0c;现在把端口定义重新梳理一下。 一、NPN和PNP区别 NPN 是用 B→E 的电流&#xff08;IB&#xff0…

STM32的推挽输出和开漏输出

文章目录 前言一、推挽输出二、开漏输出三、区别和适应场景总结前言 本篇文章将带大家了解STM32的推挽输出和开漏输出,并且学习这两个的区别,学习分别在什么时候使用这两个不同的输出方式。 在 STM32 微控制器中,GPIO(General Purpose Input/Output)模块是一个通用的输入…

什么是GPIO的推挽输出和开漏输出

数字芯片GPIO一般分为推挽输出和开漏输出 数字芯片GPIO一般是推挽输出&#xff08;PUSH-PULL&#xff09;&#xff0c;其内部结构如下&#xff1a; 当上面的MOS管导通时&#xff0c;GPIO输出高电平1&#xff0c;称为“推” 当下面MOS管导通时&#xff0c;GPIO输出低电平0&…

浅谈开漏输出和推挽输出的理解

理解电路元件特性 在理解这两种输出之前我们需要对三极管这种电路元器件进行理解&#xff0c;三极管都包括三个部分&#xff0c;基极&#xff08;base&#xff09;、集电极(Collector)以及发射极(Emitter)。他们负责不同的功能&#xff0c; 1.基极主要负责控制电流导通与否 2.…

开漏输出和推挽输出的差别

&#xff27;&#xff30;&#xff29;&#xff2f;内部仅有以上三种组合形式 而当上面任意两种形式组合时则 一、推挽输出 高低电平两两组合则形成了推挽输出的模式。 优点&#xff1a;能输出高低电平、且高低电平都有驱动能力 缺点&#xff1a;不能实现线与的功能&#xff…

终于搞清楚开漏输出和推挽输出这个鬼东西

先说下推挽输出&#xff0c;简单的说&#xff0c;就是想输出高电平&#xff0c;就输出高电平&#xff0c;想输出低电平就输出低电平。 推挽电路上面是NPN三极管&#xff0c;下面是PNP三极管&#xff0c;请注意输入端和输出端的波形。 下面是输入波形 当输入为正时&#xff0c;上…

推挽输出和开漏输出有什么不同?

推挽输出和开漏输出有什么不同&#xff1f; 推挽输出&#xff08;Push-Pull Output&#xff09;开漏输出&#xff08;Open Drain Output&#xff09;两者比较 首先介绍一下什么是推挽输出和开漏输出。 推挽输出&#xff08;Push-Pull Output&#xff09; 推挽输出结构是由两个…

区分推挽输出和开漏输出

推挽输出:可以输出高,低电平,连接数字器件。 输出 0 时&#xff0c;N-MOS 导通&#xff0c;P-MOS 高阻&#xff0c;输出0。 输出 1 时&#xff0c;N-MOS 高阻&#xff0c;P-MOS 导通&#xff0c;输出1&#xff08;不需要外部上拉电路&#xff09;。 开漏输出:输出端相当于三…