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修饰的全局变量可以在不同文件之间使用。

相关推荐
萧鼎38 分钟前
Python并发编程库:Asyncio的异步编程实战
开发语言·数据库·python·异步
学地理的小胖砸39 分钟前
【一些关于Python的信息和帮助】
开发语言·python
疯一样的码农39 分钟前
Python 继承、多态、封装、抽象
开发语言·python
^velpro^40 分钟前
数据库连接池的创建
java·开发语言·数据库
秋の花1 小时前
【JAVA基础】Java集合基础
java·开发语言·windows
小松学前端1 小时前
第六章 7.0 LinkList
java·开发语言·网络
可峰科技1 小时前
斗破QT编程入门系列之二:认识Qt:编写一个HelloWorld程序(四星斗师)
开发语言·qt
全栈开发圈1 小时前
新书速览|Java网络爬虫精解与实践
java·开发语言·爬虫
面试鸭1 小时前
离谱!买个人信息买到网安公司头上???
java·开发语言·职场和发展
小白学大数据1 小时前
JavaScript重定向对网络爬虫的影响及处理
开发语言·javascript·数据库·爬虫