当前位置: 首页 > news >正文

C语言进阶之路-指针、数组等混合小boss篇

目录

一、学习目标:

二、指针、数组的组合技能

引言

指针数组

语法

数组指针

三、勇士闯关秘籍

四、大杂脍

总结


一、学习目标:

知识点:

  • 明确指针数组的用法和特点
  • 掌握数组指针的用法和特点
  • 回顾循环等小怪用法和特点

二、指针、数组的组合技能

引言

  • 苹果
  • 苹果
  • 发霉苹果

指针数组

概念: 他是一个数组,该数组存储的多个类型相同的指针。

语法

 int *   arr[ 10 ] ;  // 整形指针数组char *  arr[ 10 ] ; // 字符指针数组float ** arr[10 ] ; // 浮点型的二级指针数组
int a  = 123 ;
int b = 456 ;
int c = 789 ;int * arr[10] = { &a, &b ,&c }; // 定义了一个有10个元素的数组arr ,这10个元素都应该是 int 类型的地址printf("*arr[0]:%d\n" , *arr[0] );// arr === &a的地址 --> *arr  === &a   --> **arr === **&&a === a == 123
printf("**(arr+1):%d\n" , **(arr+1) ); printf("**(arr+2):%d\n" , **(arr+2) ); 

操作练习:

char * s1 = "Even";
char * s2 = "Jacy";
char * s3 = "Yilia";
char * s4 = "TieZhu";char ** arr[4] = { &s1 , &s2 , &s3 ,&s4 };char ***ptr = arr ;// 使用尽可能多的方式来通过ptr 正确输出 s1 s2 s3 以及 s4 
printf("s1:%s\n" , *arr[0] );
printf("s2:%s\n" , *ptr[1] );
printf("s3:%s\n" , **(ptr+2) );
printf("s4:%s\n" , **(3+ptr) );
printf("s4:%s\n" , *3[ptr] );// 尝试输出 s1 中的 字符 ‘E’
printf("s1:%c\n" , **arr[0] );
printf("s1:%c\n" , ***arr );
printf("s1:%c\n" , ***ptr );// 尝试输出 s3 中的 字符 ‘Y’
printf("s3:%s\n" , **(ptr+2));
printf("s3:%c\n" , ***(ptr+2));
printf("s3:%c\n" , **(ptr[2]));// 尝试输出 s4 中的 字符 ‘Z’
printf("s4:%s\n" , *ptr[3]);
printf("s4:%c\n" , (*ptr[3])[3]);
printf("s4:%c\n" , *((*ptr[3])+3));

数组指针

        概念: 一个指针,该指针指向一个数组。

        语法:

数组类型 (*ptr) [ 数量 ];

示例代码:

int arr[10] = {1,2,3,4,5,6,7,8,9,0};
float * f [3]; // &f 的类型是 float *(*) [3]// int *p [10]; // 指针数组int (*ptr) [10] ;  // 数组指针
ptr = &arr ;
// int *ptr1 = &arr ;  // &a 的类型是 : int (*)[10]// 如何把3改成30
arr[3] = 30 ;// ptr = &arr ;
(*ptr)[4]= 40 ;*((*ptr)+5) = 50 ;* ((*(ptr+1))-1) = 999 ; for (int i = 0; i < 10 ; i++)
{printf("arr[%d]:%d\n" , i , arr[i]);
}

三、勇士闯关秘籍

第一关

第二关

第三关

第四关

第五关

第六关

第七关

第八关

第九关

四、大杂脍

数组

概念:使用一篇连续的内存空间来存储一组类型相同的数据。

           可以使用它来定义一系列类型相同的数据。

语法

数据的类型   数组名 [ 元素的数量 ] ; 
int   arr_int [32] ;      // 定义了一组数据 32个(连续的内存空间)并该组数据的类型是int 类型  
float arr_float [32] ;    // 定义了一组数据 32个(连续的内存空间)并该组数据的类型是float 类型
double arr_double [64] ;  // 定义了一组数据 64个(连续的内存空间)并该组数据的类型是double 类型char  arr_str []  = "Hello" ; // 定义了一组数据(连续的内存空间)并该组数据的类型是char 类型// 以上语句中没有直接说明数组中元素的数量,那么因此就必须有初始化动作,数组的大小就由初始化的数据量来决定

注意:

  • 数组在定义完成的时候,他的大小必须是已知(定义时必须明确数组的大小)。
    • 因此在定义数组的时候要么就在 【】 中括号中写明元素的数量来确定他的大小。要么就给他进行初始化。

数组名字的含义:

数组名字通常有两种含义:

        整个数组的地址:

                在定义语句中数组名表示整个数组的地址。

                在 & 取地址符中, 数组名表示整个数组的地址。

                在sizeof 运算符中 数组名表示整个数组的地址。

        首元素首地址:

                除了以上三个情况其余的都表示首元素的首地址。

数组的下标:

        概念: 数组的下标实际上是基于数组的入口地址的偏移量,偏移量的单位则是该数据则类型(指针的加减运算)。

int arr [10] = {1,2,3,4,5,6,7,8,9,0};
arr[0]   -- >  0 没有做任何偏移,因此可以访问到数组中的第0个元素  --> 数组 1 
arr[3]   -- > 数组的第3个元素 --> 数据 4 

指针:

        概念

               指针也是一个变量,只不过这种变量专门用于存储指定数据的内存地址。

        既然指针变量用于存储的是地址数据,那么指针的大小就固定下来由系统的位数决定。

                    比如32位的系统他所有的地址都是32位的数据也就是4个字节

                        64位系统他所有的地址都是64位的数据也就是8个字节

        语法:

  指向的类型  (*指针的名字) ;int a = 123;
float f  = 2345.345;        
long l = 3245232345 ;int * ptr_int = &a;  // 定义了一个整形指针 ptr_int  并把a的地址存入其中
float (*ptr_float) = &f ; // 定义了一个浮点指针 ptr_float  并把f的地址存入其中
long * ptr_long = &l ; // 定义了一个long指针 ptr_long  并把l的地址存入其中

指针的加减操作:

概念: 指针的加减就是基于指针当前所指向的地址进行偏移运算,而偏移量的单位则取决于指针的类型。

因此当对一个指针进行+1 或 -1 操作时加减的单位是该指针自己的类型,与它所指向的数据类型没有任何关系。

(64位系统)
char * ptr_c =  0x100000 ;
short *ptr_s =  0x100000 ;
int *ptr_i = 0x100000 ;
long * ptr_l = 0x100000 ;ptr_c + 1 则偏移一个指针的类型char  也就是1个字节因此地址值会变成 0x100001
ptr_s + 1 则偏移一个指针的类型short  也就是2个字节因此地址值会变成 0x100002
ptr_i + 1 则偏移一个指针的类型int  也就是4个字节因此地址值会变成 0x100004
ptr_l + 1 则偏移一个指针的类型long  也就是8个字节因此地址值会变成 0x100008  int  ** ptr_1 = 0x100000 ;
char  ** ptr_2 = 0x100000 ;
float  ** ptr_3 = 0x100000 ;int  *** ptr_4 = 0x100000 ;
char  **** ptr_5 = 0x100000 ;
float  ***** ptr_6 = 0x100000 ;ptr_1  ptr_2  ptr_3  ptr_4  ptr_5  ptr_6 这些指针在+1 的时候都+ 系统的位数(64位系统) 8个字节  0x100008不管是多少级的指针只要超过了二级都是在+1一个地址的大小

指针数组:

                概念: 他是一个数组,该数组拥有一片连续的内存空间并该空间中存储了一组 指针数字据 (地址数据)。

                一个存储了一组指针的数组称为指针数组。

语法:

 指针的数据类型  *  (数组名字 [元素的数量]) ;int *   ( arr_ptr [3] ) ={&a , &b , &c } ; // 定义了一个数组,该数组中存储了 3个元素,每一个元素都是int 类型的地址 。

注意:

        指针数组的使用与数组没有任何区别。

实例代码:

int a = 123 ;
int b = 456 ;
int c = 789 ;// 定义了一个数组,该数组中存储了 3个元素,每一个元素都是int 类型的地址 。
int * arr_int_p [3] = {&a , &b , &c} ; // 分别把 a , b , c 的地址存入数组中// 如何访问该数组中的所有元素
printf( "arr_int_p[0]: %p:%d \n" , arr_int_p[0] , *arr_int_p[0] );
printf( "arr_int_p[0]: %p:%d \n" , *(arr_int_p + 1) ,  **(arr_int_p + 1)  );// ptr_int 是一个普通的整形指针,该指针存储了 &a 的地址 (二级指针)
int ** ptr_int = arr_int_p ;  // 使用二级指针来访问二维数组
printf ( "*(ptr_int + 2):%p:%d\n",  *(ptr_int + 2) , **(ptr_int + 2));

数组指针:

        概念: 他是一个指针变量,该指针变量存储的数据是一个数组类型是地址

        语法:

数组中元素的类型   (* 指针变量名) [ 数组的元素数量 ] ;int  (*p_int)  [10] ;  // 【整形数组指针】 定义了一个指针变量  p_int ,它指向的数据的地址应该是一个整形数组的地址, 而且该数组中有10个元素
float  (*p_float)  [10] ;  // 【浮点数组指针】 定义了一个指针变量  p ,它指向的数据的地址应该是一个浮点数组的地址, 而且该数组中有10个元素

实例代码:

int arr[10] = {1,2,3,4,5,6,7,8,9,0};// &arr 表示整个数组的地址,因此他的类型是数组类型的地址
int (* ptr) [10] = &arr ;// ptr = &arr   *ptr == *&arr == arr 
// arr[2] 
printf ("(*ptr)[2]:%d\n"  ,(*ptr)[2] ) ;
printf ("* ((*ptr) + 3):%d\n" , * ((*ptr) + 3) ) ;// 使用一个一级指针来访问数组中的各项元素
int * p = arr ;
// p = arr 
// arr[5] 
printf( "p[5]:%d\n" , p[5] );
printf( "*(p + 6):%d\n" , *(p + 6) );

循环:

        概念: 使得每一段代码在特定的条件满足请跨下重复地运行。

        循环的类型:

for   是一个集成度比较高的循环结构,它包含的【初始化】、【判断】、【迭代语句】
while 是一个在条件满足的情况下执行的一个循环
do-while 是一个在执行一次代码后判断如果条件满足则执行重复代码的一个循环

for循环:

        语法:

for ( 初始化语句可以使用,逗号一次性写多个  ;   循环的判断语句   ;   循环控制变量的更新迭代 也可以是用,逗号表达式来连接多个表达式 )
{}

注意:

while循环:

        语法:

                只要布尔表达式为真(非零) ,的情况下循环体中的代码就会被不断循环

while ( 布尔表达式 )
{// 循环体}

do-while循环:

        语法:

先执行一次循环体中的代码,然后判断布尔表达式是否为真,如果为真则重复执行循环体中的代码。

do
{// 循环体
}while(布尔表达式) ;

逗号表达式

        实例:逗号表达式会从左往右依次运算,最终的值取决于最后一个表达式的值。

 int a = 123 ;int b = 567 ;int c = 789 ;int d = (a++ , ++b , ++c) ;printf("a:%d b:%d c:%c d:%d\n" , a  , b, c , d  );

总结

        本文介绍了C语言进阶之路上小BOSS的一些特点和打败方法,大家认真学习即可逐步突破,最终问鼎巅峰~

        本文参照 粤嵌文哥 部分课件经整理和修改后发布在C站,如有转载,请联系本人

相关文章:

C语言进阶之路-指针、数组等混合小boss篇

目录 一、学习目标&#xff1a; 二、指针、数组的组合技能 引言 指针数组 语法 数组指针 三、勇士闯关秘籍 四、大杂脍 总结 一、学习目标&#xff1a; 知识点&#xff1a; 明确指针数组的用法和特点掌握数组指针的用法和特点回顾循环等小怪用法和特点 二、指针、数…...

【矩阵论】Chapter 7—Hermite矩阵与正定矩阵知识点总结复习

文章目录 1 Hermite矩阵2 Hermite二次型3 Hermite正定&#xff08;非负定矩阵&#xff09;4 矩阵不等式 1 Hermite矩阵 定义 设 A A A为 n n n阶方阵&#xff0c;如果称 A A A为Hermite矩阵&#xff0c;则需满足 A H A A^HA AHA&#xff0c;其中 A H A^H AH表示 A A A的共轭转…...

Golang语言基础之切片

概述 数组的长度是固定的并且数组长度属于类型的一部分&#xff0c;所以数组有很多的局限性 func arraySum(x [3]int) int{sum : 0for _, v : range x{sum sum v}return sum } 这个求和函数只能接受 [3]int 类型&#xff0c;其他的都不支持。 切片 切片&#xff08;Slic…...

SpringCloud-服务消费者Fegin调用时无法获取异常信息

一、前言 假设有以下需求&#xff1a; 服务消费者A调用服务提供者B往MySQL新增一条人员信息服务提供者做了一个逻辑判断&#xff1a;若无该人员信息则新增&#xff0c;若已存在该人员信息&#xff0c;则返回给消费者异常状态码及异常信息&#xff1a;“请勿添加重复数据” 问…...

re:invent 2023 Amazon Q 初体验

授权声明&#xff1a;本篇文章授权活动官方亚马逊云科技文章转发、改写权&#xff0c;包括不限于在 Developer Centre&#xff0c;知乎&#xff0c;自媒体平台&#xff0c;第三方开发者媒体等亚马逊云科技官方渠道 前言 亚马逊云科技在2023 re:Invent全球大会上宣布推出 Amazon…...

认知觉醒(四)

认知觉醒(四) 第三节 耐心&#xff1a;得耐心者得天下 20世纪八九十年代&#xff0c;金庸的武侠小说风靡全国。如今&#xff0c;虽然几十年过去了&#xff0c;金庸先生也已与世长辞&#xff0c;但他留下的作品依然广受欢迎&#xff0c;被奉为经典。如此成就&#xff0c;自然…...

AI模型部署 | onnxruntime部署YOLOv8分割模型详细教程

本文首发于公众号【DeepDriving】&#xff0c;欢迎关注。 0. 引言 我之前写的文章《基于YOLOv8分割模型实现垃圾识别》介绍了如何使用YOLOv8分割模型来实现垃圾识别&#xff0c;主要是介绍如何用自定义的数据集来训练YOLOv8分割模型。那么训练好的模型该如何部署呢&#xff1f…...

模拟电路学习笔记(一)之芯片篇(持续更新)

模拟电路学习笔记&#xff08;一&#xff09;之芯片篇&#xff08;持续更新&#xff09; 1.CD4047BE芯片 CD4047是一种包含高电压的多谐振荡器&#xff0c;该器件的操作可以在两种模式下完成&#xff0c;分别是单稳态和非稳态。CD4047需要一个外部电阻器和电容器来决定单稳态…...

如何利用CentOS7+docker+jenkins+gitee部署springboot+vue前后端项目(保姆教程)

博主介绍&#xff1a;Java领域优质创作者,博客之星城市赛道TOP20、专注于前端流行技术框架、Java后端技术领域、项目实战运维以及GIS地理信息领域。 &#x1f345;文末获取源码下载地址&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&#x1f3fb;…...

qt 5.15.2 主窗体事件及绘制功能

qt 5.15.2 主窗体事件及绘制功能 显示主窗体效果图如下所示&#xff1a; main.cpp #include "mainwindow.h"#include <QApplication>int main(int argc, char *argv[]) {QApplication a(argc, argv);MainWindow w;w.setFixedWidth(600);w.setFixedHeight(6…...

(2)(2.4) TerraRanger Tower/Tower EVO(360度)

文章目录 前言 1 安装传感器并连接 2 通过地面站进行配置 3 参数说明 前言 TeraRanger Tower 可用于在 Loiter 和 AltHold 模式下进行目标规避。传感器的最大可用距离约为 4.5m。 TeraRanger Tower EVO 可用于在 Loiter 和 AltHold 模式下进行目标规避。传感器的最大可用…...

Redis_主从复制、哨兵模式、集群模式详解

Redis的主从复制 为什么Redis要引入主从复制&#xff1f;what&#xff1f; 在这里博主为小伙伴们简单的做下解释&#xff0c;可以了解一下 实际生产环境下&#xff0c;单机的redis服务器是无法满足实际的生产需求的。 第一&#xff0c;单机的redis服务器很容易发生单点故障&am…...

关于神舟-战神TA5NS系统重装问题

加装固态卡在log处无法开机问题 下面是我的步骤 1.按f7选择pe安装系统&#xff0c;然后发现卡在战神log处不转动 2.下载驱动 TA5NS驱动地址 下载RAID驱动&#xff08;如果没有私信我&#xff0c;我网盘里有&#xff09;&#xff0c;拷到u盘中&#xff0c;然后进入pe系统里面…...

前端大文件上传webuploader(react + umi)

使用WebUploader还可以批量上传文件、支持缩略图等等众多参数选项可设置&#xff0c;以及多个事件方法可调用&#xff0c;你可以随心所欲的定制你要的上传组件。 分片上传 1.什么是分片上传 分片上传&#xff0c;就是将所要上传的文件&#xff0c;按照一定的大小&#xff0c;将…...

人大金仓(kingbase)数据库常用sql命令

一. 字段 1. 添加 alter table book add column book_id varchar not null, book_title varchar(10) default ;2. 删除 alter table book drop book_id, book_title;// 外键时 alter table book drop book_id, book_title cascade;3. 修改类型 alter table book alter colu…...

HashMap相关专题

前置知识&#xff1a;异或运算 异或运算介绍 异或有什么神奇之处&#xff08;应用&#xff09;&#xff1f; &#xff08;1&#xff09;快速比较两个值 &#xff08;2&#xff09;我们可以使用异或来使某些特定的位翻转&#xff0c;因为不管是0或者是1与1做异或将得到原值的相…...

threejs WebGLRenderer 像素比对画布大小的影响

官方文档 - WebGLRenderer .setPixelRatio ( value : number ) : undefined 设置设备像素比。通常用于避免HiDPI设备上绘图模糊 .setSize ( width : Integer, height : Integer, updateStyle : Boolean ) : undefined 将输出canvas的大小调整为(width, height)并考虑设备像素比…...

RocketMQTemplate.send() 与 RocketMQTemplate.syncSend() 方法详解

Apache RocketMQ 是一款强大的分布式消息中间件&#xff0c;与 Spring Boot 集成后&#xff0c;通过 RocketMQTemplate 提供了多种方法来发送消息。其中&#xff0c;send() 和 syncSend() 是两个常用的发送消息方法&#xff0c;本文将深入探讨它们的区别以及详细解释这两个方法…...

波奇学C++:类型转换和IO流

隐式类型转换 int i0; double pi; 强制类型转换 int* pnullptr; int a(int)p; 单参数构造函数支持隐式类型转换 class A { public:A(string a):_a(a){} private:string _a; }; A a("xxxx"); //"xxx" const char* 隐式转换为string 多参数也可以通过{…...

集成开发环境 PyCharm 的安装【侯小啾python基础领航计划 系列(二)】

集成开发环境PyCharm的安装【侯小啾python基础领航计划 系列(二)】 大家好,我是博主侯小啾, 🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔…...

Java核心知识点整理大全27-笔记(已完结)

目录 30. 云计算 30.1.1. SaaS 30.1.2. PaaS 30.1.3. IaaS 30.1.4. Docker 30.1.4.1. 概念 30.1.4.2. Namespaces 30.1.4.3. 进程(CLONE_NEWPID 实现的进程隔离) 30.1.4.4. Libnetwork 与网络隔离 30.1.4.5. 资源隔离与 CGroups 30.1.4.6. 镜像与 UnionFS 30.1.4.7.…...

1. 使用poll或epoll创建echo服务器

1. 说明&#xff1a; 此篇博客主要记录一种客户端实现方式&#xff0c;和两种使用poll或者epoll分别创建echo服务器的方式&#xff0c;具体可看代码注释&#xff1a; 2. 相关代码&#xff1a; 2.1 echoClient.cpp #include <iostream> #include <cstdio> #incl…...

【对象数组根据属性排序】

// sort使用的排序方法 // 传入对象数组用于排序的对象的属性,升序/降序 function compare(property, sortType "asc") {debugger// 如果不是 asc,desc,不做下一步比较if (!(sortType "desc" || sortType "asc")) {return;}return function (…...

BACnet I/O模块:楼宇自动化的未来选择

在楼宇自动化领域&#xff0c;BACnet通信协议在确保设备之间无缝高效的数据交换方面发挥着至关重要的作用。该领域使用广泛的协议是BACnet。它使传感器、执行器和控制器等设备能够相互通信&#xff0c;从而促进工业过程的自动化。 BACNET介绍 BACnet是专门为楼宇自动化和控制系…...

android项目实战之使用框架 集成多图片、视频的上传

效果图 实现方式&#xff0c;本功能使用PictureSelector 第三方库 。作者项目地址&#xff1a;https://github.com/LuckSiege/PictureSelector 1. builder.gradle 增加 implementation io.github.lucksiege:pictureselector:v3.11.1implementation com.tbruyelle.rxpermissio…...

MyBatis查询优化:枚举在条件构建中的妙用

&#x1f680; 作者主页&#xff1a; 有来技术 &#x1f525; 开源项目&#xff1a; youlai-mall &#x1f343; vue3-element-admin &#x1f343; youlai-boot &#x1f33a; 仓库主页&#xff1a; Gitee &#x1f4ab; Github &#x1f4ab; GitCode &#x1f496; 欢迎点赞…...

Isaac Sim教程04 Isaac Sim的高级使用

Isaac Sim 高级使用 版权信息 Copyright 2023 Herman YeAuromix. All rights reserved.This course and all of its associated content, including but not limited to text, images, videos, and any other materials, are protected by copyright law. The author holds…...

《数据结构、算法与应用C++语言描述》-线索二叉树的定义与C++实现

_23Threaded BinaryTree 可编译运行代码见&#xff1a;GIithub::Data-Structures-Algorithms-and-Applications/_24Threaded_BinaryTree 线索二叉树定义 在普通二叉树中&#xff0c;有很多nullptr指针被浪费了&#xff0c;可以将其利用起来。 首先我们要来看看这空指针有多少…...

删除误提交的 git commit

背景描述 某次的意外 commit 中误将密码写到代码中并且 push 到了 remote repo 里面, 本文将围绕这个场景讨论如何弥补. 模拟误提交操作 在 Gitee 创建一个新的 Repo, clone 到本地 git clone https://gitee.com/lpwm/myrepo.git创建两个文件, commit 后 push 到 remote 作…...

机器学习---pySpark案例

1、统计PV&#xff0c;UV 1.if __name__ __main__: 2. conf SparkConf() 3. conf.setMaster("local") 4. conf.setAppName("test") 5. sc SparkContext(confconf) 6. 7. #pv 8. sc.textFile("./pvuv").map(lambda line:(l…...

好看的做地图分析图的网站/2022最新小学生新闻

我新注册的coder.cn域名怎么样&#xff1f; 呵呵。准备用来开发一些开发人员的东东。还可以开设一些二级域名的服务供大家使用&#xff0c;例如 http://blog.coder.cn http://domain.coder.cn http://bbs.coder.cn http://gbook.coder.cn http://dotnet.coder.cn http://java.c…...

江西移动网站/广告公司职位

tidb在插入一个新数据的时候报错&#xff1a; Table has no partition for value xxx 表明表中没有这个分区&#xff0c;需要新增 查一下新增语句 ALTER TABLE fans_medal ADD PARTITION (PARTITION p20200828 VALUES LESS THAN (20200829));然后再插入我需要的数据 解决&…...

自己有网站怎么优化/如何推广一个网站

当前&#xff0c;新一轮科技革命和产业革命蓬勃兴起&#xff0c;大数据、云计算、人工智能等现代信息技术与经济社会深度融合&#xff0c;给各行各业带来了深刻的变革。 在2018&#xff08;第三届&#xff09;中国大数据产业生态大会上&#xff0c;工业和信息化部党组成员、总…...

网站设计到底做多宽/软文推广的标准类型

期刊联系地址...

怎样把有用网站做图标放在桌面/软文推广营销平台

2019独角兽企业重金招聘Python工程师标准>>> 关于区块链是什么的话题&#xff0c;估计现在已经烂大街了。但是实际上&#xff0c; 那些我们认为已经非常普通的概念&#xff0c;却往往别有洞天。 1.从社会学角度上来讲&#xff1a; 区块链的概念来自凯文.凯利《失控》…...

禁止指定ip访问网站/开一个网站需要多少钱

LinuxShell col命令 Linux col命令用于过滤控制字符。 在许多UNIX说明文件里&#xff0c;都有RLF控制字符。当我们运用shell特殊字符">“和”>>"&#xff0c;把说明文件的内容输出成纯文本文件时&#xff0c;控制字符会变成乱码&#xff0c;col指令则能有…...