Linux C语言

一、基础知识

(一)冯诺依曼体系

1、存储器:内存

存储程序的思想:按照存储器中指令的顺序

2、存储器的分类

1)主存:内存(C盘)

2)外存

3)寄存器是cpu内部的高速存储器,数目少,速度快,cache在cpu内部,外存和内存(主存)都在CPU外。

3、程序

广义:为了实现一个功能设计的工作步骤

程序:系统可以识别的一组有序指令(二进制),存储在磁盘(硬盘属于外存)上,只有在执行的时候才加载到内存。

(二)数值表示

1、数值数据:能够进行数值运算得出确切数值

非数值数据:不能进行数值运算得出确切数值

 字符数据通过ASCII码转化成二进制编码

2、二进制、八进制、十进制、十六进制

1)十六机制:数码123456789abcdef

2)十六进制前缀0x

3、原码、反码、补码

1)正数的原码、补码、反码等于他本身

2)负数的原码符号位是1,其余位不变

负数的补码的符号位是1,其余位按位取反

负数的反码符号位是1,其余位按位取反,末尾加一

(三)程序的编译和调试

1、GCC编译器

2、编译文件是否正确

1)gcc test.c -o test编译是否正确

2)gcc test.c -o test -Wall:如果语法有不规范的,作为一个展示

3)./test执行一个文件

3、程序调试

 %s    __FILE__ 显示文件名

 %s   __FUNCTION__ main函数

 %d   __LINE__显示行

5、一个程序包括数据结构和算法

二、C语言数据类型

(一)bool类型

1、bool:非零(true),零(false)

2、需要引入头文件

#include<stdbool.h>

3、举例

 

4、由于bool使用频率高,所以去除头文件,加上_Bool这样一个数据类型

5、用数据类型_Bool,则变量只能赋值数据,不能赋值true/false

如果需要true/false就要用带宏的形式的头文件

#define 1 true

(二)char类型

 字符型数据是不具有计算能力的文字数据类型

ch用%d来打印字符对应的ASCII码,用%c来打印字符。

(三)整型

(四)浮点型

float:%f

double:%lf

 (五)强制类型转换

强制数据类型转换(一般是高级转为低级,可能会损失精度)

1、显示转化

2、隐式转换

三、C语言常用命令

1、查看ASCLL码表

man ASCII

2、查看字符长度

3、查看头文件内容

例:vi /usr/include/limits.h

查看不同数据类型表示的范围

使用头文件:

#include<limits.h>

4、常用打印

1)整数:

%d十进制

%x十六进制

%o八进制

%#x:打印以0x开头的十六进制

2)浮点型

%f  float

%lf double

3)字符型%c

4)科学计数法%e

5)字符串%s

6)地址%p

5、结束程序运行ctrl+C

6、scanf的用法

scanf("%d",&A);

千万不要有\n!

7、同时打开两段代码

命令:

:vsp 要打开的文件夹

8、查函数手册man +函数

例:man putchar

四、常量-整型、浮点、指数常量

常量是指在程序运行期间数值不发生变化的数据,整型常量就是整数

(一)整数

1、整数在赋值时,只有八进制、十进制和十六进制形式

2、举例

(二)浮点数(实数)

一般含有小数,只有十进制,单精度和双精度,一般形式和指数形式

1、举例

小数由于精度太小,默认为0

(三)字符常量

可以把字符常量看作一个字节的正整数(每一个字符都对应一个ASCII码数值)。

1、常用的字符

2、字符型常量既可以用%c打印字符,也可以用%d打印ASCII对应的正整数

3、大写字母和小写字母相差32,小写=大写+32/‘ ’

4、小写c=‘A’+2+‘  ’

5、字符0-9

6、字符和数字相差48

数字2=字符2-48

(四)字符串常量(有一个隐含字符,以\0结尾)

1、字符串以\0结尾

“A”=‘A’+‘\0’

2、举例

3、字符串数组用char数据类型定义

(五)标识常量

1、宏是原样替代不是运算

如果想要做计算,要加上括号

2、宏定义格式 #define ONE 1(没有;)

3、如果行太长,行尾用\续行

#define ABC jjdiednifhiof\

disnclisa

五、变量

(一)概述

1、变量名由字母、数字、下划线组成

2、不能以数字开头,不能和C的关键字重名

3、在程序运行时,变量所占的内存空间,由变量的数据类型决定

4、变量在内存中的首地址,称为变量的地址

5、变量的一般格式:

存储类型 数据类型 变量名

存储类型是关键词auto(默认)、register、static和extern

六、变量的存储类型

(一)auto变量

只能在某个程序范围内使用,即局部变量,通常在函数体内或函数的复合语句之中。默认是一个随机的值。

1)局部变量,第二个输出报错

2)一般来说auto是省略的

(二)register寄存器型

将变量放入寄存器,这样可以加快程序的运行速度

1)放到处理器内部

2)如果申请不到就使用一般内存,同auto

3)在程序运行时,变量都调入处理器使用,如果频繁访问一个变量,可直接用register定义在处理器内部的寄存器中

4)由于寄存器数量有限,所以将变量放在寄存器可能反而会降低运行速度

5)寄存器存储类型,不能用&来查看地址

(三)全局变量static/extern

1、既可以修饰局部变量,也可以修饰全局变量。既可以在函数体内,也可以在函数体外(默认是0)。

2、static的特点

1)在内存中以固定地址存放,而不是以堆栈的形式存放。

2)只要程序没结束,就不会随着说明它的程序段消失而结束,而且下次调用该函数,该存储类型修饰的变量不在重新说明,而且保留上次存在的值。

3、auto和static区别例子

auto:

一次循环之后,a被销毁

static:

在一次循环后a不会被销毁,即使有命令也不会重新被赋值。

4、extern(全局变量,能被其他文件的程序访问)举例

5、1、2说明static和extern都是修饰全局,区别在于static是根据程序运行而存在,不能在其他文件使用,而extern修饰的全局变量可以在不同文件之间使用。

注意事项

1、可以直接给bool类型的变量赋一个true/false。

2、省略头文件用_Bool定义bool类型,则只能给变量赋数值,不能再赋true/false。

3、ch用%d来打印字符对应的ASCII码,用%c来打印字符。

4、%#x:打印以0x开头的十六进制

5、可以把字符常量看作一个字节的正整数(每一个字符都对应一个ASCII码数值)。

注意要用引号引起来:int a='F';

6、宏是原样替代不是运算

7、寄存器存储类型,不能用&来查看地址

8、再次调用含有static类型的变量的函数,该存储类型修饰的变量不在重新说明,而且保留上次存在的值,在一次循环后a不会被销毁,即使有命令也不会重新被赋值。

9、static和extern都是修饰全局,区别在于static是根据程序运行而存在,不能在其他文件使用,而extern修饰的全局变量可以在不同文件之间使用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/108604.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

windows常用命令

一.文件操作 dir&#xff1a;查看文件当前路径目录列表 cd .. &#xff1a;返回上一级目录 cd 路径&#xff1a;进入路径

【弃坑xdm】docker容器作为开发环境,更加灵活可靠

关于我准备转行深度学习~~ 弃坑xdm 弃坑xdm 弃坑xdm 转发给你的同学&#xff0c;吓他们一跳~~ ps:其实我准备使用docker容器作为开发环境&#xff0c;vscode可以直接连接docker容器&#xff0c;更加灵活可靠。

日常学习记录随笔-redis实战

redis的持久化&#xff08;rdb,aof,混合持久化&#xff09; redis的主从架构以及redis的哨兵架构 redis的clusterredis 是要做持久化的&#xff0c;一般用redis会把数据放到缓存中为了提升系统的性能 如果redis没有持久化&#xff0c;重启的化数据就会丢失&#xff0c;所有的请…

kafka 相关概念

1 kafka 生产者 kafka 用push的方式把消息推送到topic 每个topic下可以有多个分区&#xff0c; 可以用hash 也可以用轮询的方式指定分区 每个分区内部是可以保证顺序的&#xff0c;但是整体无法保证顺序&#xff0c;除非设置成一个topic只有一个分区。 kafka这种多分区的设置 带…

TX Text Control .NET Server for ASP.NET 32.0 Crack

TX Text Control .NET Server for ASP.NET 是VISUAL STUDIO 2022、ASP.NET CORE .NET 6 和 .NET 7 支持&#xff0c;将文档处理集成到 Web 应用程序中&#xff0c;为您的 ASP.NET Core、ASP.NET 和 Angular 应用程序添加强大的文档处理功能。 客户端用户界面 文档编辑器 将功能…

C++ Builder 将运行时需要的库打进运行的程序包

一、打开【工程】–【选项】–【Linker】-- 设置【Use dynamic RTL】为 False 二、打开【工程】–【选项】–【组件包】-- 设置【和运行时组件包一起编译】为 False

电子邮件地址注册过程详解

许多人可能对如何注册电子邮件地址感到困惑&#xff0c;本文将详细解析电子邮件地址的注册过程&#xff1a;确定邮箱厂商、创建邮箱账户、设置电子邮件地址。 1、确定要注册的邮箱厂商 首先我们需要确定要注册哪种类型的电子邮件服务。目前市场上有许多不同的电子邮件服务提供商…

数据库管理-第110期 Oracle Exadata 01(20231016)

数据库管理-第110期 Oracle Exadata 01&#xff08;202301016&#xff09; 今天开始一个新的系列&#xff0c;讲讲Oracle Exadata&#xff0c;将用若干期并关联之前和一体机相关的一些内容对Exadata进行讲解。本期是Oracle硬件的介绍。 1. Oracle Hardware and Engineered Sy…

VMware 配置记录

VMware 配置笔记 CentOS 7.9 镜像下载 官网太慢&#xff0c;建议在阿里云镜像站去CentOS配置页找标准版下载。 选标准版即可&#xff0c;各版本区别&#xff1a; DVD&#xff1a;标准版&#xff0c;包含常用软件&#xff0c;体积为 4.4 G&#xff1b;Everything&#xff1a…

前端本地开发中,代理配置是如何解决跨域的?

文章目录 跨域&#xff08;Cross-Origin&#xff09;开发代理原理先说一下三个概念那代理到底是如何解决跨域的&#xff1f; 补充参考视频 跨域&#xff08;Cross-Origin&#xff09; 这里再说一下跨域的概念吧。 在Web开发中&#xff0c;浏览器限制了从一个不同来源&#xff…

Mac OS m1 下安装Gradle5.1

1. 下载、解压 1.1 下载地址 https://gradle.org 往下翻 选择 5.1 或者选择 任何 你想要的版本 ,点击 binary-only 即可下载 . 1.2 解压到指定目录 2. 配置环境变量 2.1 编辑环境文件 vi ~/.bash_profile #GRADLE相关配置 GRADLE_HOME/Users/zxj/Documents/devSoft/grad…

LeetCode算法位运算—只出现一次的数字

目录 136. 只出现一次的数字 - 力扣&#xff08;LeetCode&#xff09; 解题思路&#xff1a; 代码&#xff1a; 运行结果&#xff1a; 补充 异或的重要性质 136. 只出现一次的数字 - 力扣&#xff08;LeetCode&#xff09; 给你一个 非空 整数数组 nums &#xff0c;除了某…

关于python pytorch 与CUDA版本相关问题

首先在终端中输入python进入python交互式环境 import torch print(torch.__version__) #注意是双下划线官网&#xff1a;https://pytorch.org/get-started/previous-versions/ CUDA Toolkit版本及可用PyTorch对应关系总结&#xff08;参考官网&#xff09; cuda版本确定后&a…

问题记录1 json解析问题

问题&#xff1a; json解析int类型不符合预期&#xff0c;使用json.NewDecoder解决。 示例如下&#xff1a; package mainimport ("bytes""encoding/json""fmt" )func main() {data1 : map[string]interface{}{}data1["id"] int64(4…

Fluent瞬态结果的时间统计处理

声明&#xff1a;本文基于 2023R2 版&#xff0c;在其他版本中界面操作、可设置内容等可能存在区别。 1 背景 仿真中有时需要对区域上每个位置的结果数据进行统计分析&#xff0c;例如需要统计设备表面的压力脉动情况&#xff0c;并找出压力脉动最大的位置。在Fluent中对结果…

做web自动化测试遇到Chrome浏览器老是自动更新,怎么办 ? 这里提供两个解决办法 。

web自动化安装驱动安装 进行web自动化时 &#xff0c;需要提前安装浏览器的驱动 &#xff0c;尤其是chrome浏览器 。它的更新速度很快 &#xff0c;是不是更新了新版本 。这就导致我们的驱动也要跟着变化。 1.停止自动更新 那么 &#xff0c;如何关闭chrome浏览器的自动更新…

MySQL事务MVCC详解

一、概述 MVCC (MultiVersion Concurrency Control) 叫做多版本并发控制机制。主要是通过数据多版本来实现读-写分离&#xff0c;做到即使有读写冲突时&#xff0c;也能做到不加锁&#xff0c;非阻塞并发读&#xff0c;从而提高数据库并发性能。 MVCC只在已提交读&#xff08…

Leetcode刷题详解——将x减到0的最小操作数

1. 题目链接&#xff1a;1658. 将 x 减到 0 的最小操作数 2. 题目描述: 给你一个整数数组 nums 和一个整数 x 。每一次操作时&#xff0c;你应当移除数组 nums 最左边或最右边的元素&#xff0c;然后从 x 中减去该元素的值。请注意&#xff0c;需要 修改 数组以供接下来的操作…

Linux高性能服务器编程 学习笔记 第十四章 进程池和线程池

动态创建子进程或子线程的缺点&#xff1a; 1.动态创建进程或线程比较耗时&#xff0c;这将导致较慢的客户响应。 2.动态创建的子进程或子线程通常只用来为一个客户服务&#xff08;除非我们做特殊处理&#xff09;&#xff0c;这将导致系统上产生大量的进程或线程&#xff0c…