Day16学习记录

#c语言知识

1.字符串格式化sprintf()   #include

int sprintf(char*str,const char*format);

功能:根据参数format字符串来转换并格式化数据,然后将结果输出到str指定的空间中,直到出现字符串结束符’\0’为止。

参数:str——字符串首地址

           format——字符串格式,用法和printf()一样

返回值:成功——实际格式化的字符个数     失败——-1

Day16学习记录_第1张图片

Day16学习记录_第2张图片 (存在字符串中)

2.sscanf()   #include

  int sscanf(const char*str,const char*format,...);

功能:从str指定的字符串读取数据,并根据参数format字符串来转换并格式化数据。可以转换八进制和十六进制的数。

参数:str——字符串首地址

           format——字符串格式,用法和scanf()一样

返回值:成功——参数数目,成功转换的值的个数   失败——-1

Day16学习记录_第3张图片

 Day16学习记录_第4张图片(scanf遇到空格/换行则终止)

Day16学习记录_第5张图片”%s”改成”%[^\n]

Day16学习记录_第6张图片(拆分字符串)

3.字符串查找strchr()   #include

  char*strchr(const char*s,int c);

功能:在字符串s中查找字母c出现的位置

参数:s——字符串首地址  c——匹配字母(字符)

返回值:成功——返回第一次出现的c地址 失败——NULL

 Day16学习记录_第7张图片

自定义:

Day16学习记录_第8张图片

4.strstr()   #include

  char *strstr(const char*haystack,const char*needle);

功能:在字符串haytack中查找字符串needle出现的位置

参数:haystack——源字符串首地址

      needle——匹配字符串首地址

返回值:成功——返回第一次出现的needle地址    失败——NULL

 Day16学习记录_第9张图片

 

5.字符串分割strtok()   #include

   char*strtok(char*str,const char*delim);

功能:将字符串分割成一个个片段。当strtok()在参数s的字符串中发现参数delim中包含的分割字符时,则会将该字符改为0字符,当连续出现多个时只替换第一个为0。

参数:str——指向欲分割的字符串

      delim:为分割字符串中包含的所有字符

返回值:成功——分割后字符串首地址  失败——NULL

Day16学习记录_第10张图片

 字符串截取会破坏源字符串,用\0替换分割的标志位。

Day16学习记录_第11张图片 

Day16学习记录_第12张图片

Day16学习记录_第13张图片

Day16学习记录_第14张图片

6.字符串类型转换atoi()   #include

  int atoi(const char*nptr);

功能:atoi()会扫描nptr字符串,跳过前面的空格字符,直到遇到数字或正负号才开始做转换,而遇到非数字或字符串结束符(‘\0’)才结束转换,并将结果返回返回值。

参数:nptr——待转换的字符串

返回值:成功转换后整数

类似函数有:atof()把一个小数形式的字符串转化为一个浮点数

                      atol()把一个字符串转化为long类型

Day16学习记录_第15张图片Day16学习记录_第16张图片

Day16学习记录_第17张图片

Day16学习记录_第18张图片

*总结:

1.指针 就是内存中的一个地址编号

指针变量 用于存储地址 本质是一个变量

2.指针间接赋值

(1)两个变量:普通变量、指针变量

(2)建立关系:指针变量=&普通变量

(3)通过*运算符赋值:*指针变量=值

3.指针大小

在32(64)位操作系统下所有指针类型都是4(8)个字节大小。

4.野指针:指针变量指向一个未知的空间。

操作野指针对应的内存空间可能报错。

5.空指针:指针变量指向内存编号为0的空间。

#define NULL ((void*))

操作空指针对应的内存空间会报错。

在程序中用作条件判断。

6.万能指针 void*(一级指针)

可以将所有指针类型赋值给万能指针。

万能指针一般用作于函数形参。

7.const修饰的指针

(1)通过指针改变常量的值

(2)const修饰的指针类型

(3)const修饰的指针变量

(4)const修饰指针类型修饰指针变量 常量指针

8.指针和数组

(1)指向数组的指针 指针变量[下标]  *(指针变量+偏移量)

(2)指针运算 跟指针类型 对应的基本类型有关

(3)指针数组 每一个元素都是一个指针   指针数组是一个二维数组模型

9.多级指针

一级指针指向变量的地址            *三级指针==二级指针==&一级指针

二级指针指向一级指针的地址      **三级==*二级==一级==&变量

单机指针指向二级指针的地址     ***三级==**二级==*一级==变量

10.指针和函数

(1)值传递和地址传递

(2)数组作为函数参数 退化为指针丢失精度 需要传递元素个数

(3)指针作为函数返回值

11.指针和字符串

(1)栈区字符串和数据区字符串的区别

(2)字符串数组 指针数组模型

(3)const修饰的指针 针对字符串

(4)主函数的形参

int argc 表示参数个数    char*argv 表示参数内容

(5)字符串和指针的应用

    1)字符串查找字符串个数;

    2)字符串查找字符个数;

    3)字符串反转和回文

(6)字符串处理函数

strcpy() strncpy() 字符串拷贝 (不安全)

strcat() strncat() 字符串追加

strcmp() strncmp() 字符串比较 0 1 -1

sprintf() sscanf() 字符串格式化

strchr() strstr() 字符串查找 返回值类型为指针

strtok() 字符串分割 如果找到标志位用\0替换 会破坏源字符串

atoi() atof() atol() 字符串类型转换

#图解网络

网络协议分层

Day16学习记录_第19张图片

1.应用层:我们能直接接触到的就是应用层(Application Layer),我们电脑或手机使用的应用软件都是在应用层实现。

应用层工作在操作系统中的用户态,传输层及以下则工作在内核态

2.传输层:应用层的数据包会传给传输层,传输层(Transport Layer)为应用层提供网络支持。

传输层有两个传输协议,分别是 TCP 和 UDP。

Day16学习记录_第20张图片

(当传输层的数据包大小超过 MSS(TCP 最大报文段长度) ,就要将数据包分块)

3.网络层:传输层协议只需要服务好应用即可,让其作为应用间数据传输的媒介,帮助实现应用到应用的通信,实际的传输功能交给下一层,也就是网络层(Internet Layer)。

网络层最常使用的是 IP 协议(Internet Protocol),IP 协议会将传输层的报文作为数据部分,再加上 IP 包头组装成 IP 报文,如果 IP 报文大小超过 MTU(以太网中一般为 1500 字节)就会再次进行分片,得到一个即将发送到网络的 IP 报文。

Day16学习记录_第21张图片

IP 地址分成两种意义:

一个是网络号,负责标识该 IP 地址是属于哪个子网的;

一个是主机号,负责标识同一子网下的不同主机;

(配合子网掩码才能算出IP地址的网络号和主机号。在寻址的过程中,先匹配到相同的网络号,才会去找对应的主机。——寻址能力)

IP 协议还有另一个重要的能力是路由

IP 协议的寻址作用是告诉我们去往下一个目的地该朝哪个方向走,路由则是根据「下一个目的地」选择路径。寻址更像在导航,路由更像在操作方向盘。

4.数据链路层:

跨网络传输——路由器同时在两个网络中,通过路由表计算出下一个要去的IP地址——数据链路层识别网络中的设备,让数据在一个链路中传输,为网络层提供链路级别传输的服务。

(每一台设备的网卡都有一个 MAC 地址,用来唯一标识设备。路由器计算出了下一个目的地 IP 地址,再通过 ARP 协议找到该目的地的 MAC 地址,这样就知道这个 IP 地址是哪个设备的了。)

5.物理层:

数据从设备发送到网络——数据包转换成电信号,在物理介质中传输——物理层为数据链路层提供二进制传输的服务。

Day16学习记录_第22张图片

c语言知识来源:bilibili-黑马程序员

图解网络来源:vx公众号-小林coding

你可能感兴趣的:(学习,算法)