【Redis】五大数据结构及其常用指令

文章目录

  • 说明
  • String类型
  • List类型
  • Set类型
  • Hash类型
  • Sorted Set 排序集合
  • 总结

说明

Redis里面的数据类型有String、List、Set、Hash、Zset。这篇文章会介绍这5种数据类型并介绍操作它们的指令.

String类型

字符串是一种最基本的Redis值类型。Redis字符串是二进制安全的,这意味着一个Redis字符串能包含任意类型的数据,例如: 一张JPEG格式的图片或者一个序列化的Ruby对象。

一个字符串类型的值最多能存储512M字节的内容。

下面是字符串的一些指令

添加值 set <key> <value>

127.0.0.1:6379> set name ttpfx
OK

获取值 get <key>

127.0.0.1:6379> get name
"ttpfx"

将给定的 <value> 追加到原值的末尾 append <key> <value>

127.0.0.1:6379> append name 123
(integer) 8
127.0.0.1:6379> get name
"ttpfx123"
127.0.0.1:6379> 

strlen获取对应key的长度 strlen <key>

127.0.0.1:6379> get name
"ttpfx123"
127.0.0.1:6379> strlen name
(integer) 8
127.0.0.1:6379> 

setnx只有在对应key不存在的时候才设置key的值 setnx <key> <value>

127.0.0.1:6379> keys *
1) "name"
127.0.0.1:6379> setnx name hello
(integer) 0
127.0.0.1:6379> setnx age 20
(integer) 1
127.0.0.1:6379> keys *
1) "name"
2) "age"
127.0.0.1:6379> 

incr 将key中存储的值+1,只能操作数字,如果不存在key,那么就设置key,值为1 。incr <key>

127.0.0.1:6379> get age
"20"
127.0.0.1:6379> incr age
(integer) 21
127.0.0.1:6379> incr name
(error) ERR value is not an integer or out of range
127.0.0.1:6379>

还有一个decr,效果和incr基本一样的,只不过是将值-1,如果不存在值,那么初始值为-1 decr <key>

127.0.0.1:6379> get age
"21"
127.0.0.1:6379> decr age
(integer) 20
127.0.0.1:6379> 

增加/减少指定值,incrby / decr <key> <value>,如果对应的key不存在,那么创建对应key并设置为 ±指定的值

127.0.0.1:6379> incrby age 5
(integer) 25
127.0.0.1:6379> decrby age 5
(integer) 20
127.0.0.1:6379> 

一次设置多个k-v,那么就使用mset ,指令格式为 mset <key1> <value> <key2> <value2> …

127.0.0.1:6379> mset a1 1 a2 2 a3 3
OK
127.0.0.1:6379> 

一次获取多个key的值,使用mget,指令格式为 mget <key1> <key2> …

127.0.0.1:6379> mget a1 a2 a3
1) "1"
2) "2"
3) "3"
127.0.0.1:6379> mget a1 a4
1) "1"
2) (nil)
127.0.0.1:6379> 

一次设置多个k-v,当对应的k不存在才设置,使用 msetnx <key1> <value> <key2> <value2> …,需要注意的是,这个操作要所有的key都不存在才进行设置value,是原子性的,存在任意一个key都会执行失败。

127.0.0.1:6379> msetnx d1 1 d2 2 d3 3
(integer) 1
127.0.0.1:6379> msetnx e1 1 e2 2 d3 3
(integer) 0
127.0.0.1:6379> get e1
(nil)
127.0.0.1:6379> 

获取对应key字串,使用getrange,语法为 getrange <key> <start> <end>,两边都是闭区间

127.0.0.1:6379> getrange name 0 3
"ttpf"
127.0.0.1:6379> getrange name 0 100
"ttpfx123"
127.0.0.1:6379> getrange name 100 1000
""
127.0.0.1:6379> 

更改对应key的部分内容,使用setrange,语法为 **setrange <key> <start> **,会从start位置开始进行覆盖

127.0.0.1:6379> get name
"ttpfx123"
127.0.0.1:6379> setrange name 5 4567
(integer) 9
127.0.0.1:6379> get name
"ttpfx4567"
127.0.0.1:6379> 

可以给key设置过期时间,指令为 setex <key> <过期时间(秒)> <value> ,查看过期时间使用ttl key

127.0.0.1:6379> setex money 10 888
OK
127.0.0.1:6379> get money
"888"
127.0.0.1:6379> ttl money
(integer) 5
127.0.0.1:6379> ttl money
(integer) 3
127.0.0.1:6379> ttl money
(integer) -2
127.0.0.1:6379> get money
(nil)
127.0.0.1:6379>

通过getset指令可以实现以旧换新,再设置新值的时候返回旧值 getset <key> <value>

127.0.0.1:6379> get name
"ttpfx123"
127.0.0.1:6379> getset name ttpfx
"ttpfx123"
127.0.0.1:6379> get name
"ttpfx"
127.0.0.1:6379> 

***

List类型

Redis列表是简单的字符串列表,按照插入顺序排序。List是一个双向链表

image-20230404134440545

**lpush/rpush <key> <value1> <value2> … **从左边/右边插入一个或多个值

127.0.0.1:6379[1]> lpush names tom jack
(integer) 2
127.0.0.1:6379[1]> lrange names 0 -1
1) "jack"
2) "tom"
127.0.0.1:6379[1]> rpush names t1 t2
(integer) 4
127.0.0.1:6379[1]> lrange names 0 -1
1) "jack"
2) "tom"
3) "t1"
4) "t2"
127.0.0.1:6379[1]> 

**lpop/rpop <key> [count] ** 左边/右边删除count个值,count是可选值,不写默认就是1

127.0.0.1:6379[1]> lrange names 0 -1
1) "jack"
2) "tom"
3) "t1"
4) "t2"
127.0.0.1:6379[1]> lpop names
"jack"
127.0.0.1:6379[1]> lpop names 2
1) "tom"
2) "t1"
127.0.0.1:6379[1]> lrange names 0 -1
1) "t2"
127.0.0.1:6379[1]> 

rpoplpush <source> <destination> 相当于对source执行rpop,对destination执行lpush

127.0.0.1:6379[1]> lrange k1s 0 -1
1) "c"
2) "b"
3) "a
127.0.0.1:6379[1]> lrange k2s 0 -1
1) "e"
2) "d"
3) "c"
127.0.0.1:6379[1]> rpoplpush k1s k2s
"a"
127.0.0.1:6379[1]> lrange k1s 0 -1
1) "c"
2) "b"
127.0.0.1:6379[1]> lrange k2s 0 -1
1) "a"
2) "e"
3) "d"
4) "c"
127.0.0.1:6379[1]> 

lrange <key> <start> <end> 返回列表指定索引区间的元素,最左边开始为0,最右边开始为-1,都是闭区间

127.0.0.1:6379[1]> lrange names 0 -1
1) "t1"
2) "t2"
3) "t3"
4) "t4"
127.0.0.1:6379[1]> lrange names 0 2
1) "t1"
2) "t2"
3) "t3"
127.0.0.1:6379[1]> 

lindex <key> <i> 获得指定索引的元素

127.0.0.1:6379[1]> lindex names 1
"t2"
127.0.0.1:6379[1]> lindex names -1
"t4"
127.0.0.1:6379[1]>

llen <key> 获取指定列表的长度

127.0.0.1:6379[1]> llen names
(integer) 4
127.0.0.1:6379[1]> 

**linsert <key> [before|after] <value> <newValue> ** 在指定集合的第一个value前面/后面插入一个newValue

127.0.0.1:6379[1]> lrange names 0 -1
1) "t1"
2) "t2"
3) "t3"
4) "t4"
127.0.0.1:6379[1]> linsert names before t2 a
(integer) 5
127.0.0.1:6379[1]> linsert names after t2 a
(integer) 6
127.0.0.1:6379[1]> lrange names 0 -1
1) "t1"
2) "a"
3) "t2"
4) "a"
5) "t3"
6) "t4"
127.0.0.1:6379[1]> linsert names after a b
(integer) 7
127.0.0.1:6379[1]> lrange names 0 -1
1) "t1"
2) "a"
3) "b"
4) "t2"
5) "a"
6) "t3"
7) "t4"
127.0.0.1:6379[1]>

**lrem <key> <count> <value> ** 从左边开始删除count个value,会返回删除的个数

127.0.0.1:6379[1]> lrange names 0 -1
1) "t1"
2) "a"
3) "b"
4) "t2"
5) "a"
6) "t3"
7) "t4"
127.0.0.1:6379[1]> lrem names 2 a
(integer) 2
127.0.0.1:6379[1]> lrange names 0 -1
1) "t1"
2) "b"
3) "t2"
4) "t3"
5) "t4"
127.0.0.1:6379[1]> 

lset <key> <index> <value> 设置指定下标的值

127.0.0.1:6379[1]> lrange names 0 -1
1) "t1"
2) "t2"
3) "t3"
4) "t4"
127.0.0.1:6379[1]> lset names 1 tom
OK
127.0.0.1:6379[1]> lset names 100 jack
(error) ERR index out of range
127.0.0.1:6379[1]> lrange names 0 -1
1) "t1"
2) "tom"
3) "t3"
4) "t4"
127.0.0.1:6379[1]> 


Set类型

Set和List都是集合,不同之处就是Set不允许有重复元素。

sadd key element [element …] 添加元素

127.0.0.1:6379[2]> sadd names tom jack
(integer) 2
127.0.0.1:6379[2]> smembers names
1) "tom"
2) "jack"
127.0.0.1:6379[2]> 

smembers key 查看set中所有元素

127.0.0.1:6379[2]> smembers names
1) "tom"
2) "jack"
127.0.0.1:6379[2]> 

**sismember key value ** 判断某个set中是否有某个值,有返回1,没有返回0

127.0.0.1:6379[2]> smembers names
1) "tom"
2) "jack"
127.0.0.1:6379[2]> sismember names tom
(integer) 1
127.0.0.1:6379[2]> sismember names lucy
(integer) 0
127.0.0.1:6379[2]> 

scard key 返回set元素个数

127.0.0.1:6379[2]> scard names
(integer) 2
127.0.0.1:6379[2]> 

srem key value [value …] 删除一个或多个值

127.0.0.1:6379[2]> smembers names
1) "tom"
2) "jack"
3) "jery"
4) "ttpfx"
127.0.0.1:6379[2]> srem names tom jack
(integer) 2
127.0.0.1:6379[2]> smembers names
1) "jery"
2) "ttpfx"
127.0.0.1:6379[2]> 

spop key [count] 随机删除count个值,不写count默认就是1

127.0.0.1:6379[2]> smembers names
1) "tom"
2) "jack"
3) "jery"
4) "ttpfx"
127.0.0.1:6379[2]> spop names 
"jack"
127.0.0.1:6379[2]> spop names 2
1) "tom"
2) "jery"
127.0.0.1:6379[2]> smembers names
1) "ttpfx"
127.0.0.1:6379[2]> 

**srandmember key [count] ** 和spop基本用于,只不过不会删除对应元素

127.0.0.1:6379[2]> smembers names
1) "tom"
2) "jack"
3) "jery"
4) "ttpfx"
127.0.0.1:6379[2]> srandmember names 
"jack"
127.0.0.1:6379[2]> srandmember names 2
1) "tom"
2) "jery"
127.0.0.1:6379[2]> smembers names
1) "tom"
2) "jack"
3) "jery"
4) "ttpfx"
127.0.0.1:6379[2]> 

smove source destination value 将指定值从一个Set移到另外一个Set

127.0.0.1:6379[2]> smembers t1
1) "a"
2) "b"
127.0.0.1:6379[2]> smembers t2
1) "c"
2) "d"
127.0.0.1:6379[2]> smove t1 t2 a
(integer) 1
127.0.0.1:6379[2]> smembers t1
1) "b"
127.0.0.1:6379[2]> smove t1 t2 a
(integer) 0
127.0.0.1:6379[2]> smembers t2
1) "a"
2) "c"
3) "d"
127.0.0.1:6379[2]> 

sinter/sunion/sdiff key [key …] 对指定集合进行交集/并集/差集运算

127.0.0.1:6379[2]> smembers x1
1) "c"
2) "a"
3) "b"
127.0.0.1:6379[2]> smembers x2
1) "c"
2) "d"
3) "b"
127.0.0.1:6379[2]> sinter x1 x2
1) "c"
2) "b"
127.0.0.1:6379[2]> sunion x1 x2
1) "a"
2) "c"
3) "d"
4) "b"
127.0.0.1:6379[2]> sdiff x1 x2
1) "a"
127.0.0.1:6379[2]> 


Hash类型

hash是一个键值对的集合,类似于java中的HashMap,一般用于存储对象

hset key filed value [filed value] 给key对象中的filed字段设置值,hmset作用是一样的,但是根据Redis 4.0.0,HMSET被视为已弃用。请在新代码中使用HSET。

127.0.0.1:6379[3]> hset user name ttpfx age 20
(integer) 2
127.0.0.1:6379[3]> 

hmget key filed [filed] 获取key里面对应字段的值,hget key filed 获取key中filed的值

127.0.0.1:6379[3]> hmget user name age salary
1) "ttpfx"
2) "20"
3) (nil)
127.0.0.1:6379[3]> hget user name
"ttpfx"
127.0.0.1:6379[3]> 

hexists key filed 对应的key中是否存在filed字段

127.0.0.1:6379[3]> hexists user name
(integer) 1
127.0.0.1:6379[3]> hexists user salary
(integer) 0
127.0.0.1:6379[3]> 

hkeys key 列出对应key中所有的字段

127.0.0.1:6379[3]> hkeys user
1) "name"
2) "age"
127.0.0.1:6379[3]> 

hvals key 列出对应key中的所有值

127.0.0.1:6379[3]> hvals user
1) "ttpfx"
2) "20"
127.0.0.1:6379[3]> 

hincrby key filed increment 给key中的指定字段值加上某个数

127.0.0.1:6379[3]> hincrby user age -1
(integer) 19
127.0.0.1:6379[3]> hincrby user age 10
(integer) 29
127.0.0.1:6379[3]> 

hsetnx key filed value 当key中不存在filed字段时才进行设置该值

127.0.0.1:6379[3]> hsetnx user name tom
(integer) 0
127.0.0.1:6379[3]> hsetnx user salary 88888
(integer) 1
127.0.0.1:6379[3]> 


Sorted Set 排序集合

和Set类似,只不过多了一个score来代表权重,集合中的元素根据score进行排序

zadd key [NX|XX] [CH] [INCR] score member [score member …],添加字段,score是一个double值

可选参数解释如下:

  • XX: 仅仅更新存在的成员,不添加新成员。
  • NX: 不更新存在的成员。只添加新成员。
  • CH: 修改返回值为发生变化的成员总数,原始是返回新添加成员的总数 (CH 是 changed 的意思)。更改的元素是新添加的成员,已经存在的成员更新分数。 所以在命令中指定的成员有相同的分数将不被计算在内。注:在通常情况下,ZADD返回值只计算新添加成员的数量。
  • INCR: 当ZADD指定这个选项时,成员的操作就等同ZINCRBY命令,对成员的分数进行递增操作。
127.0.0.1:6379[4]> zadd sgyy 100 gy 200 zf 300 zy 400 mc 500 hz
(integer) 5
127.0.0.1:6379[4]> 

zrange key min max [withscorces] 返回下标在[min,max]之间的值,使用withscorces可以返回对应的分数

127.0.0.1:6379[4]> zrange sgyy 0 2
1) "gy"
2) "zf"
3) "zy"
127.0.0.1:6379[4]> zrange sgyy 0 2 withscores
1) "gy"
2) "100"
3) "zf"
4) "200"
5) "zy"
6) "300"
127.0.0.1:6379[4]> 

zscore key member 返回member对应的score

127.0.0.1:6379[4]> zscore sgyy zy
"300"
127.0.0.1:6379[4]> 

zrangebyscore key min max [withscores] [limit offset count] 返回指定score区间的值,都是闭区间

zrevrangebyscore 和zrangebyscore 基本一样的,就是按照max,min来指定区间

127.0.0.1:6379[4]> zrangebyscore sgyy 100 350 withscores
1) "gy"
2) "100"
3) "zf"
4) "200"
5) "zy"
6) "300"
127.0.0.1:6379[4]> zrangebyscore sgyy 100 350 withscores limit 0 2
1) "gy"
2) "100"
3) "zf"
4) "200"
127.0.0.1:6379[4]> 

zincrby key increment member 增加某个元素的score

127.0.0.1:6379[4]> zincrby sgyy -50 gy
"50"
127.0.0.1:6379[4]> 

zrem key member [member] 删除对应的值

127.0.0.1:6379[4]> zrem sgyy hz mc
(integer) 2
127.0.0.1:6379[4]> 

zcount key min max 统计分数区间内有多少个元素

127.0.0.1:6379[4]> zcount sgyy 50 200
(integer) 2
127.0.0.1:6379[4]> 

zrank key member 返回指定元素在集合中的排名,0开始

127.0.0.1:6379[4]> zrank sgyy gy
(integer) 0
127.0.0.1:6379[4]> zrank sgyy zf
(integer) 1
127.0.0.1:6379[4]> 

***

总结

上面只是部分常用的指令,关于操作数据的指令还有很多,可以参考 redis命令中心

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

5.1.1 Ext JS之Grid actioncolumn动作列的动态显示

在Ext JS 的 Grid中添加动作列的方式是配置一个 actioncolumn类型的动作列,这个动作列可以包含多个图表的按钮。 添加的方式如下: {xtype: actioncolumn,items:[{iconCls: x-fa fa-trash,}]}在有的时候场景中, 会根据不同行的数据来决定是否显示动作按钮, 也就是最后的效果…

关于OpenAI的DALL的一点使用心得

文章目录注册DALL使用根据描述来generate上传图片来generate也可以根据描述信息或者相似的图片来进行设计注册DALL https://openai.com/product/dall-e-2 使用 根据描述来generate surprise me 自动生成描述&#xff08;因为每个月只有15个免费credits&#xff0c;节省起见…

java面试题(持续更新)

java面试题&#xff08;持续更新&#xff09; java 基础 java面向对象有哪些特征 面向对象的三大特征&#xff1a;封装、继承、多态 封装&#xff1a;隐藏了类的内部实现机制&#xff0c;可以在不影响使用的情况下改变类的内部结构&#xff0c;同时也保护了数据&#xff0c;…

Microsoft Dynamics 365 Business Central Planning Worksheet中Action Message状态变化

学习目标&#xff1a; 掌握Planning Worksheet中Action Message状态变化 学习内容&#xff1a; 掌握 创建物料&#xff0c;工作中心&#xff0c;工艺路线&#xff0c;BOM&#xff0c;物料和工艺路线&#xff0c;BOM的关联掌握 按订单的生产的物料卡片设置掌握 创建销售订单并…

二叉树的5个性质【要点:完全二叉树的性质】

只讲不会的 普通二叉树就要讲排列顺序了&#xff01;&#xff01;&#xff01; 预备&#xff1a;满二叉树&#xff1a;1.前提是它必须是二叉树 2.每个结点&#xff08;除了终端结点外&#xff09;都是2个子女。 要点1&#xff1a;关于普通的树的结点的计算&#xff0…

【CocosCreator入门】CocosCreator组件 | Label(文本)组件

Cocos Creator 是一款流行的游戏开发引擎&#xff0c;具有丰富的组件和工具&#xff0c;其中Label组件是最常用的之一。Label 组件是一个用于显示文本的 UI 组件。在本文中&#xff0c;我们将探讨 Label 组件的一些技术方面&#xff0c;包括如何创建、配置和使用它。 目录 一、…

java的集合体系结构(以及集合的遍历方式)

文章目录java集合的体系结构遍历方式通用(三种):迭代器,增强for,lambda表达式遍历迭代器(不依赖索引,适合set集合遍历)java集合的体系结构 注意点&#xff1a; Col1 ection是一个接口&#xff0c;我们不能直接创建他的对象。 所以&#xff0c;现在我们学习他的方法时&#xff0…

【数据库管理】①实例与数据库

1.Oracle RDBMS 架构图 2. Oracle 体系结构 由此区分database和instance的区别 No.1.oracle serverdatabase instance2.databasedata file、control file、redo log file3.instancean instance accesses a database4.oracle memorySGA PGA(oracle的内存结构)5.instanceSGA …

用C语言写一个函数,把字符串转换成整数

这是一个很有意思的问题。请不要把这个问题想的太简单了&#xff0c;考虑问题时应该尽可能的全面一些。请先思考并且实现这个函数&#xff0c;再来看讲解。 分析一下&#xff1a;函数名是StrToInt&#xff0c;那么可以这么调用&#xff1a; int ret StrToInt("1234&quo…

前端后端交互系列之Jquery下的Ajax

目录前言Jquery发送Ajax请求1. 引入jquery文件2. 页面结构3. 发送get请求4. 发送post请求5. 通用方法总结前言 本篇文章讲解的是Jquery下的Ajax。Jquery到现今用的不是很多&#xff0c;但是会有老的项目依旧使用Jquery&#xff0c;所以了解用Jquery实现利用ajax进行交互是有必…

SpringCloud微服务技术栈.黑马跟学(十二)

SpringCloud微服务技术栈.黑马跟学 十二今日目标服务异步通信-高级篇1.消息可靠性1.1.生产者消息确认1.1.1.修改配置1.1.2.定义Return回调1.1.3.定义ConfirmCallback1.2.消息持久化1.2.1.交换机持久化1.2.2.队列持久化1.2.3.消息持久化1.3.消费者消息确认1.3.1.演示none模式1.3…

蓝桥杯刷题冲刺 | 倒计时6天

作者&#xff1a;指针不指南吗 专栏&#xff1a;蓝桥杯倒计时冲刺 &#x1f43e;马上就要蓝桥杯了&#xff0c;最后的这几天尤为重要&#xff0c;不可懈怠哦&#x1f43e; 文章目录1.凑数2.砝码称重1.凑数 题目 链接&#xff1a; 4941. 凑数 - AcWing题库 初始时&#xff0c;n0…

CesiumForUnreal实现贴地面(SurfacePolygon)效果

文章目录 1.实现目标2.实现过程2.1 材质实例2.2 Cartographic Polygon2.3 Runtime环境使用2.4 效果测试2.5 遇到的UE崩溃问题与解决3.参考资料1.实现目标 基于UE5的Cesium-Unreal插件添加在线世界地形Cesium World Terrain,在地形表面绘制Polygon面,并使其紧贴地形,实现贴地…

实验四 配置OSPF协议

目录 一、实验内容 二、实验环境 三、实验步骤 一、实验内容 在配置NAT实验的基础上&#xff0c;增加R0到R1的GRE VPN隧道&#xff0c;并将10.0.0.0/24网络和192.168.0.0/24网络通过GRE隧道192.168.2.0/24网络连通&#xff0c;使用OSPF协议路由&#xff0c;使得PC2能访问PC0…

MongoDB - 索引知识

索引简介 什么是索引 索引最常用的比喻就是书籍的目录&#xff0c;查询索引就像查询一本书的目录。 索引支持 MongoDB 查询的高效执行。如果没有索引&#xff0c;MongoDB 必须扫描集合中每一个文档&#xff0c;以选择与查询语句相匹配的文档。如果查询存在适当的索引&#x…

深入学习JavaScript系列(七)——Promise async/await generator

本篇属于本系列第七篇 第一篇&#xff1a;#深入学习JavaScript系列&#xff08;一&#xff09;—— ES6中的JS执行上下文 第二篇&#xff1a;# 深入学习JavaScript系列&#xff08;二&#xff09;——作用域和作用域链 第三篇&#xff1a;# 深入学习JavaScript系列&#xff…

ChatGPT探索系列之二:学习GPT模型系列的发展历程和原理

文章目录前言一、GPT的起源GPT系列二、GPT的原理1. GPT原理&#xff1a;自注意2. GPT原理&#xff1a;位置编码3. GPT原理&#xff1a;Masked Language Modeling4. GPT原理&#xff1a;预训练5. GPT原理&#xff1a;微调6. GPT原理&#xff1a;多任务学习三、GPT模型的风险与挑…

二叉搜索树BST的学习

文章目录二叉搜索树BST什么是BST&#xff1f;用BST做什么&#xff1f;一、BST的特性BST的特性是什么&#xff1f;1.[230. 二叉搜索树中第K小的元素](https://leetcode.cn/problems/kth-smallest-element-in-a-bst/)2.[538. 把二叉搜索树转换为累加树](https://leetcode.cn/prob…

Git Commit Message 应该怎么写?

原文链接&#xff1a; Git Commit Message 应该怎么写&#xff1f; 最近被同事吐槽了&#xff0c;说我代码提交说明写的太差。其实都不用他吐槽&#xff0c;我自己心里也非常清楚。毕竟很多时候犯懒&#xff0c;都是直接一个 -m "fix" 就提交上去了。 这样做是非常…

C语言变量

C 变量 变量其实只不过是程序可操作的存储区的名称。C 中每个变量都有特定的类型&#xff0c;类型决定了变量存储的大小和布局&#xff0c;该范围内的值都可以存储在内存中&#xff0c;运算符可应用于变量上。 变量的名称可以由字母、数字和下划线字符组成。它必须以字母或下…