C语言基础

C语言知识点总结

1.进制转换

整数十进制转二进制:除以2取余数,把余数按照从低位到高位依次表示

小数十进制转二进制:乘以2 取整 取到规定的位数

0.2====>

0.2

   2

0.4-----------0

   2

0.8-----------0

   2

0.6-----------1

   2

0.2-----------1

== 0011 0011 0011 ......

= 0011 0011 00

0.25====>

0.25

     2

0.5-----------0

   2

0.0-----------1

== 01

二进制转十进制:二进制每一位的权 乘以 当前位的值  (权:以2为底数,以位数为指数幂)的累加和

10101 ====>

1 * 2^0 +  0 * 2^1 + 1 * 2^2 + 0 * 2^3 + 1 * 2^4

= 1* 1 + 1 * 4 + 1 * 16 = 1 + 4 + 16 = 21

十六进制转十进制:十六进制每一位的权 乘以 当前位的值  (权:以16为底数,以位数为指数幂)的累加和

7A======>

A * 16^0 + 7 * 16^1 = 10 + 112 = 122

十进制转十六进制:除以16取余数,把余数按照从低位到高位依次表示

234

    /    16---------10(A)

         14

    /     16--------14(E)

   0

234=====>EA

二进制转十六进制/八进制:把四位/三位 二进制转为一个十六进制位/八进制位,如果高位不够补0进行转换

10101010111====>16进制

0 101  0101  0111===> 5  5  7

10101010111====>8进制

010 101 010 111====>2 5 2 7

2.数的存储

原码:数据的二进制格式

10:0   .....0000...   1010

-10:1   .....0000...   1010

反码:

正数:反码 == 原码

负数:在原码的基础上每一位(除了符号位)取反(1变为0,0变为1)

10:0   .....0000...   1010

-10:1   .....1111...   0101

补码:

正数:补码 == 原码

负数:在反码的基础上 + 1

10:0   .....0000...   1010

-10:1   .....1111...   0110

3.基本数据类型

short (int):短整型------16位二进制(16bit),2B

int:整型-------------32位(32bit),4B

long (int):长整型-------在32位系统大小为 32位(32bit),4B ;在64位系统大小为 64位(64bit),8B

long long (int):超长整型----64位(64bit),8B

有符号数:

(signed):有符号数,最高位为 符号位

无符号数:

unsigned:无符号数,没有符号位

32位无符号整数:unsigned int

16位有符号整数:signed short int--------->short

4.浮点型

float:单精度浮点型---32位(32bit),4B,精度:6/7

符号位:1bit

阶码:8bit

尾数:23bit

double:双精度浮点型-----64位(64bit),8B,精度:15/16

符号位:1bit

阶码:11bit

尾数:52bit

5.位运算符

<<(按位左移)

数据值 << 移动位数

将一个数据所有二进制位向左移若干位,左边(高位)移出的部分舍去,右边(低位)自动补零

>>(按位右移)

数据值 << 移动位数

将一个数据所有二进制位向右移若干位,右边(低位)移除的部分舍去,左边(高位)根据原最高位自动补值(原最高位为1:补1,元最高位为0,补0)

指针

指针类型,都是统一的大小,各个类型之间没有区别

32位机器:4B

64位机器:8B

1.指针与一维数组

因为数组名可以表示数组首地址,而指针变量也可以存储数组首地址,在访问数组的操作时,指针变量和数组名作用一致,所以

数组名[n]:访问数组的n元素  ====  指针名[n]

int *p,a[5];

p = a;

p + n == a + n//等价

a[n] == *(p+n) == *(a+n) == p[n]

基于指针变量,可以将指针当做数组用,不能越界

2.字符数组

字符数组中存储的字符串,要求在字符串结束的下一个字符位置存储'\0'

'\0'字符就表示 字符串的结束

循环可以通过判断‘\0’是否存在来终结循环

3.指针与二维数组

数组名是整个二维数组的首地址

每个元素是一个一维数组,在元素(一维数组)中,每个成员就是一个值

二维数组:

数据类型数组名[行][列]

行:有多少个一维数组

列:一维数组的元素个数

a[0]:表示二维数组的元素零,第零个一维数组,a[0]是一维数组的数组名,在这个一维数组的首地址  

a[0] == &a[0][0]

a[0]+1 == &a[0][1]

a[1]:第一个一维数组,也是这个一维数组的数组名(首地址)

a[1] == &a[1][0]

a[1]+1 == &a[1][1]

数组指针:

是一个指针,指针用于存储整个数组的地址,指针的指向类型为数组

定义:

数组元素类型   (*  指针变量名)[大小];

int (*p)[4];//定义一个指针变量,指针变量存储 整个数组的地址(int [4])

4.数组指针

数组指针和二维数组名是等价的,因为二维数组表示第零个元素(一维数组)的地址

int a[3][4];

int (*p)[4];

p = a;//&a[0]

所以:

p+1 == a+1 == &a[1]

*(p+1) == a[1]

*(p+1)+2 == &a[1][2]

*(*(p+1)+2) == a[1][2]

5.指针数组

指针数组:是一个数组,只是每个元素为指针类型

指向类型 * 指针数组名[元素个数];

int * p[5];

定义 包含 5个元素 每个元素为指针(int *)

6.多级指针

一级指针:存储变量的地址

二级指针:存储一级指针的地址:一级指针类型 * 指针名;

三级指针:存储二级指针的地址:二级指针类型 * 指针名;

int **p;

int * a[10];

p = a;

p+1 == a+1;

*(p+2) == a[2]

二级指针与指针数组名等价

 指针与函数

指针作为函数的参数:可以表示变量的地址,或者是数组名/数组首地址,作用就是表示参数为地址

指针作为函数返回值:返回一个地址,把指针作为函数的结果返回

把地址作为参数进行传递

函数指针:指针存储是的函数的地址 

函数地址:

函数名就是用于表示函数的地址

函数指针 = 函数名;

调用函数:

通过函数指针进行调用

函数指针名(实参);

构造类型

1.结构体

使用多种数据类型作为成员,进行组合,构成的新的类型,就叫做结构体

struct结构体名字

{

类型1 成员1;

类型2 成员2;

类型3 成员3;

};

2、共用体(联合体)

使用多种数据类型作为成员,进行组合,但是使用同一段空间存储(多个成员共用一个空间),构成的新的类型,就叫做共用体

使用共用体的问题:同一时刻只能操作一个成员

声明共用体类型:

union 共用体名

{

类型1 成员1;

类型2 成员2;

类型3 成员3;

};

3、枚举

枚举就是定义一种新类型时,这个类型能够取值的范围是确定的,通过这个定义的新类型把能欧取值的范围一一列举出来,这种类型就叫做枚举

声明枚举类型:

enum枚举名

{

成员1,

成员2,

成员3,

};

常用的字符串函数

//把src首地址的字符串,拷贝到dest首地址中

char *strcpy(char *dest, const char *src);

//比较字符串s1 和 s2 是否相等,如果相等返回0,如果不等返回当前字符的差值

int strcmp(const char *s1, const char *s2);

//计算 s 字符串的字符个数(不算'\0'),返回值就是字符串的长度

size_t strlen(const char *s);

//把src字符串 拼接到 dest字符串后

char *strcat(char *dest, const char *src);

动态内存

栈中变量,只要离开了变量的生命周期,变量就会由系统销毁释放

堆空间:有程序员在程序中,自己进行管理的空间,需要使用时进行申请,由自己进行释放销毁。空间的申请与释放都是由程序员在程序中指定,通过地址指针进行访问空间,根据指针的类型就按照对应类型进行访问,就叫做动态内存

malloc函数在堆空间中申请指定大小的内存空间

free就是释放malloc申请的空间

Linux基础

Linux是免费开源的内核程序

Linux操作系统:

ubuntu

debian

deepin

red hat

centos

Linux系统体系架构

shell:命令解释器,通过shell提供内核的功能

 

1、内核

内核是linux系统中最底层,提供系统中核心功能并允许有序访问硬件资源

用于管理:

输入输出设备、进程的执行情况、文件系统的操作、内存管理

linux内核支持:

多任务、多用户

2、文件系统

文件系统就是用于组织和管理计算机存储设备上的大量文件

windows中使用NTFS文件系统格式

linux中格式多,目前通用EXT4文件系统格式

linux文件系统的逻辑结构(linux目录结构):

linux中 文件系统把文件组织为倒置的树,每一个文件夹(目录)当做树的分支

文件系统只有一个起始点叫做根: / ---根

Linux文件系统把一切所有内容都看做文件,Linux一切皆文件

Linux文件系统就是一个 树形的目录结构:

将 / 作为整个文件系统的起点,其他的所有目录都是从根开始

Linux文件系统存储文件:

/:根目录

/bin:存储系统中最常用的可执行程序

/boot:存储Linux系统启动文件

/dev:存储系统中的设备文件,包括硬盘、鼠标、键盘

/etc:存储系统配置文件,如passwd存储用户信息

/home:普通用户的家目录位置

/lib:存放共享库

/media:存储cd、软盘、usb临时读入的文件

/mnt:挂载的文件系统挂载点

/opt:作为可选程序和文件存放目录

/proc:当前执行的进程的文件存储目录

/root:超级用户的家目录

/sbin:作为扩展的,更多的二进制程序存储目录

/usr:标准库、第三方库存储目录

3、shell

shell叫做命令解释器,当执行程序时,把程序中的各种操作命令进行解释执行,通过命令解释器让内核执行对应操作,可以提供一种用户与操作系统交互的方式

常用目录文件命令

pwd:用于查询显示用户当前的工作路径

cd:改变用户当前的工作路径(改变工作目录)

mkdir:创建目录文件,在指定路径下创建目录

rmdir:删除空目录

ls:列出目录或文件的内容项

文件命令

-n:添加行号

tail:查看文件最后几行

head:查看文件前几行

模板:head  -n  文件路径

-n:显示n行

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值