 Hello 算法 1.1.0 Go版字节,在大多数编程语言中取决于特定的字符编码方法,详见“字 符编码”章节。 ‧ 即使表示布尔量仅需 1 位(0 或 1),它在内存中通常也存储为 1 字节。这是因为现代计算机 CPU 通常 将 1 字节作为最小寻址内存单元。 那么,基本数据类型与数据结构之间有什么联系呢?我们知道,数据结构是在计算机中组织与存储数据的方 式。这句话的主语是“结构”而非“数据”。 如果想表示“一排数字”,我们自然会想到使用数 以采用以下策略。 1. 改良哈希表数据结构,使得哈希表可以在出现哈希冲突时正常工作。 2. 仅在必要时,即当哈希冲突比较严重时,才执行扩容操作。 哈希表的结构改良方法主要包括“链式地址”和“开放寻址”。 6.2.1 链式地址 在原始哈希表中,每个桶仅能存储一个键值对。链式地址(separate chaining)将单个元素转换为链表,将键 值对作为链表节点,将所有发生冲突的键值对都存储在同一链表中。图 树”或“红黑树”,从而 将查询操作的时间复杂度优化至 ?(log ?) 。 6.2.2 开放寻址 开放寻址(open addressing)不引入额外的数据结构,而是通过“多次探测”来处理哈希冲突,探测方式主 要包括线性探测、平方探测和多次哈希等。 第 6 章 哈希表 hello‑algo.com 123 下面以线性探测为例,介绍开放寻址哈希表的工作机制。 1. 线性探测 线性探测采用固定步长的线性搜索0 码力 | 383 页 | 18.48 MB | 1 年前3 Hello 算法 1.1.0 Go版字节,在大多数编程语言中取决于特定的字符编码方法,详见“字 符编码”章节。 ‧ 即使表示布尔量仅需 1 位(0 或 1),它在内存中通常也存储为 1 字节。这是因为现代计算机 CPU 通常 将 1 字节作为最小寻址内存单元。 那么,基本数据类型与数据结构之间有什么联系呢?我们知道,数据结构是在计算机中组织与存储数据的方 式。这句话的主语是“结构”而非“数据”。 如果想表示“一排数字”,我们自然会想到使用数 以采用以下策略。 1. 改良哈希表数据结构,使得哈希表可以在出现哈希冲突时正常工作。 2. 仅在必要时,即当哈希冲突比较严重时,才执行扩容操作。 哈希表的结构改良方法主要包括“链式地址”和“开放寻址”。 6.2.1 链式地址 在原始哈希表中,每个桶仅能存储一个键值对。链式地址(separate chaining)将单个元素转换为链表,将键 值对作为链表节点,将所有发生冲突的键值对都存储在同一链表中。图 树”或“红黑树”,从而 将查询操作的时间复杂度优化至 ?(log ?) 。 6.2.2 开放寻址 开放寻址(open addressing)不引入额外的数据结构,而是通过“多次探测”来处理哈希冲突,探测方式主 要包括线性探测、平方探测和多次哈希等。 第 6 章 哈希表 hello‑algo.com 123 下面以线性探测为例,介绍开放寻址哈希表的工作机制。 1. 线性探测 线性探测采用固定步长的线性搜索0 码力 | 383 页 | 18.48 MB | 1 年前3
 Hello 算法 1.0.0 Golang版字节,在大多数编程语言中取决于特定的字符编码方法,详见“字 符编码”章节。 ‧ 即使表示布尔量仅需 1 位(0 或 1),它在内存中通常也存储为 1 字节。这是因为现代计算机 CPU 通常 将 1 字节作为最小寻址内存单元。 那么,基本数据类型与数据结构之间有什么联系呢?我们知道,数据结构是在计算机中组织与存储数据的方 式。这句话的主语是“结构”而非“数据”。 如果想表示“一排数字”,我们自然会想到使用数 以采用以下策略。 1. 改良哈希表数据结构,使得哈希表可以在出现哈希冲突时正常工作。 2. 仅在必要时,即当哈希冲突比较严重时,才执行扩容操作。 哈希表的结构改良方法主要包括“链式地址”和“开放寻址”。 6.2.1 链式地址 在原始哈希表中,每个桶仅能存储一个键值对。「链式地址 separate chaining」将单个元素转换为链表,将 键值对作为链表节点,将所有发生冲突的键值对都存储在同一链表中。图 将查询操作的时间复杂度优化至 ?(log ?) 。 6.2.2 开放寻址 「开放寻址 open addressing」不引入额外的数据结构,而是通过“多次探测”来处理哈希冲突,探测方式主 要包括线性探测、平方探测和多次哈希等。 第 6 章 哈希表 hello‑algo.com 123 下面以线性探测为例,介绍开放寻址哈希表的工作机制。 1. 线性探测 线性探测采用固定步长的线性搜索0 码力 | 382 页 | 17.60 MB | 1 年前3 Hello 算法 1.0.0 Golang版字节,在大多数编程语言中取决于特定的字符编码方法,详见“字 符编码”章节。 ‧ 即使表示布尔量仅需 1 位(0 或 1),它在内存中通常也存储为 1 字节。这是因为现代计算机 CPU 通常 将 1 字节作为最小寻址内存单元。 那么,基本数据类型与数据结构之间有什么联系呢?我们知道,数据结构是在计算机中组织与存储数据的方 式。这句话的主语是“结构”而非“数据”。 如果想表示“一排数字”,我们自然会想到使用数 以采用以下策略。 1. 改良哈希表数据结构,使得哈希表可以在出现哈希冲突时正常工作。 2. 仅在必要时,即当哈希冲突比较严重时,才执行扩容操作。 哈希表的结构改良方法主要包括“链式地址”和“开放寻址”。 6.2.1 链式地址 在原始哈希表中,每个桶仅能存储一个键值对。「链式地址 separate chaining」将单个元素转换为链表,将 键值对作为链表节点,将所有发生冲突的键值对都存储在同一链表中。图 将查询操作的时间复杂度优化至 ?(log ?) 。 6.2.2 开放寻址 「开放寻址 open addressing」不引入额外的数据结构,而是通过“多次探测”来处理哈希冲突,探测方式主 要包括线性探测、平方探测和多次哈希等。 第 6 章 哈希表 hello‑algo.com 123 下面以线性探测为例,介绍开放寻址哈希表的工作机制。 1. 线性探测 线性探测采用固定步长的线性搜索0 码力 | 382 页 | 17.60 MB | 1 年前3
 Hello 算法 1.2.0 简体中文 Go 版字节,在大多数编程语言中取决于特定的字符编码方法,详见“字 符编码”章节。 ‧ 即使表示布尔量仅需 1 位(0 或 1),它在内存中通常也存储为 1 字节。这是因为现代计算机 CPU 通常 将 1 字节作为最小寻址内存单元。 那么,基本数据类型与数据结构之间有什么联系呢?我们知道,数据结构是在计算机中组织与存储数据的方 式。这句话的主语是“结构”而非“数据”。 如果想表示“一排数字”,我们自然会想到使用数 以采用以下策略。 1. 改良哈希表数据结构,使得哈希表可以在出现哈希冲突时正常工作。 2. 仅在必要时,即当哈希冲突比较严重时,才执行扩容操作。 哈希表的结构改良方法主要包括“链式地址”和“开放寻址”。 6.2.1 链式地址 在原始哈希表中,每个桶仅能存储一个键值对。链式地址(separate chaining)将单个元素转换为链表,将键 值对作为链表节点,将所有发生冲突的键值对都存储在同一链表中。图 将查询操作的时间复杂度优化至 ?(log ?) 。 6.2.2 开放寻址 开放寻址(open addressing)不引入额外的数据结构,而是通过“多次探测”来处理哈希冲突,探测方式主 要包括线性探测、平方探测和多次哈希等。 第 6 章 哈希表 www.hello‑algo.com 123 下面以线性探测为例,介绍开放寻址哈希表的工作机制。 1. 线性探测 线性探测采用固定步长的线性0 码力 | 384 页 | 18.49 MB | 10 月前3 Hello 算法 1.2.0 简体中文 Go 版字节,在大多数编程语言中取决于特定的字符编码方法,详见“字 符编码”章节。 ‧ 即使表示布尔量仅需 1 位(0 或 1),它在内存中通常也存储为 1 字节。这是因为现代计算机 CPU 通常 将 1 字节作为最小寻址内存单元。 那么,基本数据类型与数据结构之间有什么联系呢?我们知道,数据结构是在计算机中组织与存储数据的方 式。这句话的主语是“结构”而非“数据”。 如果想表示“一排数字”,我们自然会想到使用数 以采用以下策略。 1. 改良哈希表数据结构,使得哈希表可以在出现哈希冲突时正常工作。 2. 仅在必要时,即当哈希冲突比较严重时,才执行扩容操作。 哈希表的结构改良方法主要包括“链式地址”和“开放寻址”。 6.2.1 链式地址 在原始哈希表中,每个桶仅能存储一个键值对。链式地址(separate chaining)将单个元素转换为链表,将键 值对作为链表节点,将所有发生冲突的键值对都存储在同一链表中。图 将查询操作的时间复杂度优化至 ?(log ?) 。 6.2.2 开放寻址 开放寻址(open addressing)不引入额外的数据结构,而是通过“多次探测”来处理哈希冲突,探测方式主 要包括线性探测、平方探测和多次哈希等。 第 6 章 哈希表 www.hello‑algo.com 123 下面以线性探测为例,介绍开放寻址哈希表的工作机制。 1. 线性探测 线性探测采用固定步长的线性0 码力 | 384 页 | 18.49 MB | 10 月前3
 Hello 算法 1.0.0b5 Golang版字节,在大多数编程语言中取决于特定的字符编码方法,详见“字 符编码”章节。 ‧ 即使表示布尔量仅需 1 位(0 或 1),它在内存中通常被存储为 1 字节。这是因为现代计算机 CPU 通常 将 1 字节作为最小寻址内存单元。 那么,基本数据类型与数据结构之间有什么联系呢?我们知道,数据结构是在计算机中组织与存储数据的方 式。它的主语是“结构”而非“数据”。 如果想要表示“一排数字”,我们自然会想到使用数 以采用以下策略。 1. 改良哈希表数据结构,使得哈希表可以在存在哈希冲突时正常工作。 2. 仅在必要时,即当哈希冲突比较严重时,才执行扩容操作。 哈希表的结构改良方法主要包括“链式地址”和“开放寻址”。 6.2.1 链式地址 在原始哈希表中,每个桶仅能存储一个键值对。「链式地址 separate chaining」将单个元素转换为链表,将 键值对作为链表节点,将所有发生冲突的键值对都存储在同一链表中。图 com 117 值得注意的是,当链表很长时,查询效率 ?(?) 很差。此时可以将链表转换为“AVL 树”或“红黑树”,从而 将查询操作的时间复杂度优化至 ?(log ?) 。 6.2.2 开放寻址 「开放寻址 open addressing」不引入额外的数据结构,而是通过“多次探测”来处理哈希冲突,探测方式主 要包括线性探测、平方探测、多次哈希等。 1. 线性探测 线性探测采用固定步长的线0 码力 | 379 页 | 30.70 MB | 1 年前3 Hello 算法 1.0.0b5 Golang版字节,在大多数编程语言中取决于特定的字符编码方法,详见“字 符编码”章节。 ‧ 即使表示布尔量仅需 1 位(0 或 1),它在内存中通常被存储为 1 字节。这是因为现代计算机 CPU 通常 将 1 字节作为最小寻址内存单元。 那么,基本数据类型与数据结构之间有什么联系呢?我们知道,数据结构是在计算机中组织与存储数据的方 式。它的主语是“结构”而非“数据”。 如果想要表示“一排数字”,我们自然会想到使用数 以采用以下策略。 1. 改良哈希表数据结构,使得哈希表可以在存在哈希冲突时正常工作。 2. 仅在必要时,即当哈希冲突比较严重时,才执行扩容操作。 哈希表的结构改良方法主要包括“链式地址”和“开放寻址”。 6.2.1 链式地址 在原始哈希表中,每个桶仅能存储一个键值对。「链式地址 separate chaining」将单个元素转换为链表,将 键值对作为链表节点,将所有发生冲突的键值对都存储在同一链表中。图 com 117 值得注意的是,当链表很长时,查询效率 ?(?) 很差。此时可以将链表转换为“AVL 树”或“红黑树”,从而 将查询操作的时间复杂度优化至 ?(log ?) 。 6.2.2 开放寻址 「开放寻址 open addressing」不引入额外的数据结构,而是通过“多次探测”来处理哈希冲突,探测方式主 要包括线性探测、平方探测、多次哈希等。 1. 线性探测 线性探测采用固定步长的线0 码力 | 379 页 | 30.70 MB | 1 年前3
 Hello 算法 1.0.0b4 Golang版0 布尔 bool 1 byte false true false � 字符的占用空间大小取决于编程语言采用的字符编码方法,详见「字符编码」章节。 现代计算机 CPU 通常将 1 字节作为最小寻址内存单元。因此,即使表示布尔量仅需 1 位(0 或 1),它在内存中通常被存储为 1 字节。 那么,基本数据类型与数据结构之间有什么联系与区别呢?我们知道,数据结构是在计算机中组织与存储数 据 的数据搬运与哈希值计算。为了提升效率,我们切换一下思路: 1. 改良哈希表数据结构,使得哈希表可以在存在哈希冲突时正常工作。 2. 仅在必要时,即当哈希冲突比较严重时,才执行扩容操作。 哈希表的结构改良方法主要包括链式地址和开放寻址。 6.2.1. 链式地址 在原始哈希表中,每个桶仅能存储一个键值对。「链式地址 Separate Chaining」将单个元素转换为链表,将 键值对作为链表节点,将所有发生冲突的键值对都存储在同一链表中。 com 101 � 当链表很长时,查询效率 ?(?) 很差,此时可以将链表转换为「AVL 树」或「红黑树」,从而 将查询操作的时间复杂度优化至 ?(log ?) 。 6.2.2. 开放寻址 「开放寻址 Open Addressing」不引入额外的数据结构,而是通过“多次探测”来处理哈希冲突,探测方式 主要包括线性探测、平方探测、多次哈希等。 线性探测 线性探测采用固定步长的线性查找来进行探测,对应的哈希表操作方法为:0 码力 | 347 页 | 27.40 MB | 1 年前3 Hello 算法 1.0.0b4 Golang版0 布尔 bool 1 byte false true false � 字符的占用空间大小取决于编程语言采用的字符编码方法,详见「字符编码」章节。 现代计算机 CPU 通常将 1 字节作为最小寻址内存单元。因此,即使表示布尔量仅需 1 位(0 或 1),它在内存中通常被存储为 1 字节。 那么,基本数据类型与数据结构之间有什么联系与区别呢?我们知道,数据结构是在计算机中组织与存储数 据 的数据搬运与哈希值计算。为了提升效率,我们切换一下思路: 1. 改良哈希表数据结构,使得哈希表可以在存在哈希冲突时正常工作。 2. 仅在必要时,即当哈希冲突比较严重时,才执行扩容操作。 哈希表的结构改良方法主要包括链式地址和开放寻址。 6.2.1. 链式地址 在原始哈希表中,每个桶仅能存储一个键值对。「链式地址 Separate Chaining」将单个元素转换为链表,将 键值对作为链表节点,将所有发生冲突的键值对都存储在同一链表中。 com 101 � 当链表很长时,查询效率 ?(?) 很差,此时可以将链表转换为「AVL 树」或「红黑树」,从而 将查询操作的时间复杂度优化至 ?(log ?) 。 6.2.2. 开放寻址 「开放寻址 Open Addressing」不引入额外的数据结构,而是通过“多次探测”来处理哈希冲突,探测方式 主要包括线性探测、平方探测、多次哈希等。 线性探测 线性探测采用固定步长的线性查找来进行探测,对应的哈希表操作方法为:0 码力 | 347 页 | 27.40 MB | 1 年前3
 Hello 算法 1.0.0b1 Golang版扩容来减小冲突概率。极端情况下,当输入空间和输出空间 大小相等时,哈希表就等价于数组了,可谓“大力出奇迹”。 另一方面,考虑通过优化哈希表的表示方式以缓解哈希冲突,常见的方法有「链式地址」和「开放寻址」。 6. 散列表 hello‑algo.com 86 6.2.1. 哈希表扩容 「负载因子 Load Factor」定义为 哈希表中元素数量除以桶槽数量(即数组大小),代表哈希冲突的严重程度。 为了提升操作效率,可以把「链表」转化为「AVL 树」或「红黑树」,将查询操作的时间复杂度优化至 ?(log ?) 。 6. 散列表 hello‑algo.com 87 6.2.3. 开放寻址 「开放寻址」不引入额外数据结构,而是通过“多次探测”来解决哈希冲突。根据探测方法的不同,主要分为 线性探测、平方探测、多次哈希。 线性探测 「线性探测」使用固定步长的线性查找来解决哈希冲突。 工业界方案 Java 采用「链式地址」。在 JDK 1.8 之后,HashMap 内数组长度大于 64 时,长度大于 8 的链 表会被转化为「红黑树」,以提升查找性能。 Python 采用「开放寻址」。字典 dict 使用伪随机数进行探测。 6.3. 小结 ‧ 向哈希表中输入一个键 key ,查询到值 value 的时间复杂度为 ?(1) ,非常高效。 ‧ 哈希表的常用操作包括查询、添加与删除键值对、遍历键值对等。0 码力 | 190 页 | 14.71 MB | 1 年前3 Hello 算法 1.0.0b1 Golang版扩容来减小冲突概率。极端情况下,当输入空间和输出空间 大小相等时,哈希表就等价于数组了,可谓“大力出奇迹”。 另一方面,考虑通过优化哈希表的表示方式以缓解哈希冲突,常见的方法有「链式地址」和「开放寻址」。 6. 散列表 hello‑algo.com 86 6.2.1. 哈希表扩容 「负载因子 Load Factor」定义为 哈希表中元素数量除以桶槽数量(即数组大小),代表哈希冲突的严重程度。 为了提升操作效率,可以把「链表」转化为「AVL 树」或「红黑树」,将查询操作的时间复杂度优化至 ?(log ?) 。 6. 散列表 hello‑algo.com 87 6.2.3. 开放寻址 「开放寻址」不引入额外数据结构,而是通过“多次探测”来解决哈希冲突。根据探测方法的不同,主要分为 线性探测、平方探测、多次哈希。 线性探测 「线性探测」使用固定步长的线性查找来解决哈希冲突。 工业界方案 Java 采用「链式地址」。在 JDK 1.8 之后,HashMap 内数组长度大于 64 时,长度大于 8 的链 表会被转化为「红黑树」,以提升查找性能。 Python 采用「开放寻址」。字典 dict 使用伪随机数进行探测。 6.3. 小结 ‧ 向哈希表中输入一个键 key ,查询到值 value 的时间复杂度为 ?(1) ,非常高效。 ‧ 哈希表的常用操作包括查询、添加与删除键值对、遍历键值对等。0 码力 | 190 页 | 14.71 MB | 1 年前3
 Hello 算法 1.0.0b2 Golang版大小相等时,哈希表就等价于数组了,每个 key 都对应唯一的数组索引,可谓“大力出奇迹”。 另一方面,考虑通过优化哈希表的表示来缓解哈希冲突,常见的方法有「链式地址 Separate Chaining」和 「开放寻址 Open Addressing」。 6.2.1. 哈希表扩容 哈希函数的最后一步往往是对桶数量 ? 取余,以将哈希值映射到桶的索引范围,从而将 key 放入对应的桶中。 当哈希表容量越大(即 查询效率降低,因为需要线性遍历链表来查找对应元素; 为了提升操作效率,可以把「链表」转化为「AVL 树」或「红黑树」,将查询操作的时间复杂度优化至 ?(log ?) 。 6.2.3. 开放寻址 「开放寻址」不引入额外数据结构,而是通过“多次探测”来解决哈希冲突。根据探测方法的不同,主要分为 线性探测、平方探测、多次哈希。 线性探测 「线性探测」使用固定步长的线性查找来解决哈希冲突。 工业界方案 Java 采用「链式地址」。在 JDK 1.8 之后,HashMap 内数组长度大于 64 时,长度大于 8 的链 表会被转化为「红黑树」,以提升查找性能。 Python 采用「开放寻址」。字典 dict 使用伪随机数进行探测。 Golang 采用「链式地址」。Go 规定每个桶最多存储 8 个键值对,超出容量则连接一个溢出桶; 当溢出桶过多时,会执行一次特殊的等量扩容操作,以保证性能。0 码力 | 202 页 | 15.73 MB | 1 年前3 Hello 算法 1.0.0b2 Golang版大小相等时,哈希表就等价于数组了,每个 key 都对应唯一的数组索引,可谓“大力出奇迹”。 另一方面,考虑通过优化哈希表的表示来缓解哈希冲突,常见的方法有「链式地址 Separate Chaining」和 「开放寻址 Open Addressing」。 6.2.1. 哈希表扩容 哈希函数的最后一步往往是对桶数量 ? 取余,以将哈希值映射到桶的索引范围,从而将 key 放入对应的桶中。 当哈希表容量越大(即 查询效率降低,因为需要线性遍历链表来查找对应元素; 为了提升操作效率,可以把「链表」转化为「AVL 树」或「红黑树」,将查询操作的时间复杂度优化至 ?(log ?) 。 6.2.3. 开放寻址 「开放寻址」不引入额外数据结构,而是通过“多次探测”来解决哈希冲突。根据探测方法的不同,主要分为 线性探测、平方探测、多次哈希。 线性探测 「线性探测」使用固定步长的线性查找来解决哈希冲突。 工业界方案 Java 采用「链式地址」。在 JDK 1.8 之后,HashMap 内数组长度大于 64 时,长度大于 8 的链 表会被转化为「红黑树」,以提升查找性能。 Python 采用「开放寻址」。字典 dict 使用伪随机数进行探测。 Golang 采用「链式地址」。Go 规定每个桶最多存储 8 个键值对,超出容量则连接一个溢出桶; 当溢出桶过多时,会执行一次特殊的等量扩容操作,以保证性能。0 码力 | 202 页 | 15.73 MB | 1 年前3
 Golang 101(Go语言101 中文版)  v1.21.a一旦一个变量被声明之 后,它的值可以被通过纯赋值语句来修改。 多个变量可以同时在一条赋值语 句中被修改。 一个赋值语句等号左边的表达式必须是一个可寻址的值、一个映射元素或者一 个空标识符。 内存地址(以及指针)和映射将在以后的文章中介绍。 常量是不可改变的(不可寻址的),所以常量不能做为目标值出现在纯赋值语 句的左边,而只能出现在右边用做源值。 变量既可以出现在纯赋值语句的左 边用做目标值,也可以出现在右边用做源值。 y // 7 6 5 包级变量在初始化的时候不能相互依赖。比如,下面这个变量声明语句编译不 通过。 1| var x, y = y, x 值的可寻址性 在Go中,有些值是可以被寻址的。上面已经提到所有变量都是可以寻址的, 所有常量都是不可被寻址。 我们可以从后面的指针(第15章)一文了解更多 关于内存地址和指针的知识。 非常量数字值相关的显式类型转换规则 在Go中,两个类型不一样的基本类型(第6章)值是不能相互赋值的。 我们也可以使用前置取地址操作符&来获取一个可寻址的值的地址。 对于 一个类型为T的可寻址的值t,我们可以用&t来取得它的地址。&t的类型 为*T。 一般说来,一个可寻址的值是指被放置在内存中某固定位置处的一个值(但放 置在某固定位置处的一个值并非一定是可寻址的)。 目前,我们只需知道所 有变量都是可以寻址的;但是所有常量、函数返回值和强制转换结果都是不可 寻址的。 当一个变量被声明的时候,Go运行时将为此变量开辟一段内存。此0 码力 | 821 页 | 956.82 KB | 1 年前3 Golang 101(Go语言101 中文版)  v1.21.a一旦一个变量被声明之 后,它的值可以被通过纯赋值语句来修改。 多个变量可以同时在一条赋值语 句中被修改。 一个赋值语句等号左边的表达式必须是一个可寻址的值、一个映射元素或者一 个空标识符。 内存地址(以及指针)和映射将在以后的文章中介绍。 常量是不可改变的(不可寻址的),所以常量不能做为目标值出现在纯赋值语 句的左边,而只能出现在右边用做源值。 变量既可以出现在纯赋值语句的左 边用做目标值,也可以出现在右边用做源值。 y // 7 6 5 包级变量在初始化的时候不能相互依赖。比如,下面这个变量声明语句编译不 通过。 1| var x, y = y, x 值的可寻址性 在Go中,有些值是可以被寻址的。上面已经提到所有变量都是可以寻址的, 所有常量都是不可被寻址。 我们可以从后面的指针(第15章)一文了解更多 关于内存地址和指针的知识。 非常量数字值相关的显式类型转换规则 在Go中,两个类型不一样的基本类型(第6章)值是不能相互赋值的。 我们也可以使用前置取地址操作符&来获取一个可寻址的值的地址。 对于 一个类型为T的可寻址的值t,我们可以用&t来取得它的地址。&t的类型 为*T。 一般说来,一个可寻址的值是指被放置在内存中某固定位置处的一个值(但放 置在某固定位置处的一个值并非一定是可寻址的)。 目前,我们只需知道所 有变量都是可以寻址的;但是所有常量、函数返回值和强制转换结果都是不可 寻址的。 当一个变量被声明的时候,Go运行时将为此变量开辟一段内存。此0 码力 | 821 页 | 956.82 KB | 1 年前3
 Golang 101(Go语言101 中文版)  v1.21.a一旦一个变量被声明之 后,它的值可以被通过纯赋值语句来修改。 多个变量可以同时在一条赋值语句 中被修改。 一个赋值语句等号左边的表达式必须是一个可寻址的值、一个映射元素或者一 个空标识符。 内存地址(以及指针)和映射将在以后的文章中介绍。 常量是不可改变的(不可寻址的),所以常量不能做为目标值出现在纯赋值语 句的左边,而只能出现在右边用做源值。 变量既可以出现在纯赋值语句的左边 用做目标值,也可以出现在右边用做源值。 c+1, y // 7 6 5 包级变量在初始化的时候不能相互依赖。比如,下面这个变量声明语句编译不 通过。 var x, y = y, x 值的可寻址性 在Go中,有些值是可以被寻址的。上面已经提到所有变量都是可以寻址的,所 有常量都是不可被寻址。 我们可以从后面的指针(第15章)一文了解更多关于 内存地址和指针的知识。 非常量数字值相关的显式类型转换规则 在Go中,两个类型不一样的基本类型(第6章)值是不能相互赋值的。 作是一个匿名变量)为T的零值。 2. 我们也可以使用前置取地址操作符&来获取一个可寻址的值的地址。 对于 一个类型为T的可寻址的值t,我们可以用&t来取得它的地址。&t的类型为 *T。 一般说来,一个可寻址的值是指被放置在内存中某固定位置处的一个值(但放 置在某固定位置处的一个值并非一定是可寻址的)。 目前,我们只需知道所有 变量都是可以寻址的;但是所有常量、函数返回值和强制转换结果都是不可寻 址的。 当一0 码力 | 608 页 | 1.08 MB | 1 年前3 Golang 101(Go语言101 中文版)  v1.21.a一旦一个变量被声明之 后,它的值可以被通过纯赋值语句来修改。 多个变量可以同时在一条赋值语句 中被修改。 一个赋值语句等号左边的表达式必须是一个可寻址的值、一个映射元素或者一 个空标识符。 内存地址(以及指针)和映射将在以后的文章中介绍。 常量是不可改变的(不可寻址的),所以常量不能做为目标值出现在纯赋值语 句的左边,而只能出现在右边用做源值。 变量既可以出现在纯赋值语句的左边 用做目标值,也可以出现在右边用做源值。 c+1, y // 7 6 5 包级变量在初始化的时候不能相互依赖。比如,下面这个变量声明语句编译不 通过。 var x, y = y, x 值的可寻址性 在Go中,有些值是可以被寻址的。上面已经提到所有变量都是可以寻址的,所 有常量都是不可被寻址。 我们可以从后面的指针(第15章)一文了解更多关于 内存地址和指针的知识。 非常量数字值相关的显式类型转换规则 在Go中,两个类型不一样的基本类型(第6章)值是不能相互赋值的。 作是一个匿名变量)为T的零值。 2. 我们也可以使用前置取地址操作符&来获取一个可寻址的值的地址。 对于 一个类型为T的可寻址的值t,我们可以用&t来取得它的地址。&t的类型为 *T。 一般说来,一个可寻址的值是指被放置在内存中某固定位置处的一个值(但放 置在某固定位置处的一个值并非一定是可寻址的)。 目前,我们只需知道所有 变量都是可以寻址的;但是所有常量、函数返回值和强制转换结果都是不可寻 址的。 当一0 码力 | 608 页 | 1.08 MB | 1 年前3
 Golang 101(Go语言101 中文版)  v1.21.a一旦一个变量被声明之后,它 的值可以被通过纯赋值语句来修改。 多个变量可以同时在一条赋值语句中被修改。 一个赋值语句等号左边的表达式必须是一个可寻址的值、一个映射元素或者一个空 标识符。 内存地址(以及指针)和映射将在以后的文章中介绍。 常量是不可改变的(不可寻址的),所以常量不能做为目标值出现在纯赋值语句的 左边,而只能出现在右边用做源值。 变量既可以出现在纯赋值语句的左边用做目标 值,也可以出现在右边用做源值。 // 7 6 5 包级变量在初始化的时候不能相互依赖。比如,下面这个变量声明语句编译不通 过。 1| var x, y = y, x 值的可寻址性 在Go中,有些值是可以被寻址的。上面已经提到所有变量都是可以寻址的,所有常 量都是不可被寻址。 我们可以从后面的指针(第15章)一文了解更多关于内存地址 和指针的知识。 非常量数字值相关的显式类型转换规则 在Go中,两个类型不一样的基本类型(第6章)值是不能相互赋值的。 我们也可以使用前置取地址操作符&来获取一个可寻址的值的地址。 对于一 个类型为T的可寻址的值t,我们可以用&t来取得它的地址。&t的类型为 *T。 一般说来,一个可寻址的值是指被放置在内存中某固定位置处的一个值(但放置在 某固定位置处的一个值并非一定是可寻址的)。 目前,我们只需知道所有变量都是 第15章:指针 121 可以寻址的;但是所有常量、函数返回值和强制转换结果都是不可寻址的。 当一个 变量被声0 码力 | 591 页 | 21.40 MB | 1 年前3 Golang 101(Go语言101 中文版)  v1.21.a一旦一个变量被声明之后,它 的值可以被通过纯赋值语句来修改。 多个变量可以同时在一条赋值语句中被修改。 一个赋值语句等号左边的表达式必须是一个可寻址的值、一个映射元素或者一个空 标识符。 内存地址(以及指针)和映射将在以后的文章中介绍。 常量是不可改变的(不可寻址的),所以常量不能做为目标值出现在纯赋值语句的 左边,而只能出现在右边用做源值。 变量既可以出现在纯赋值语句的左边用做目标 值,也可以出现在右边用做源值。 // 7 6 5 包级变量在初始化的时候不能相互依赖。比如,下面这个变量声明语句编译不通 过。 1| var x, y = y, x 值的可寻址性 在Go中,有些值是可以被寻址的。上面已经提到所有变量都是可以寻址的,所有常 量都是不可被寻址。 我们可以从后面的指针(第15章)一文了解更多关于内存地址 和指针的知识。 非常量数字值相关的显式类型转换规则 在Go中,两个类型不一样的基本类型(第6章)值是不能相互赋值的。 我们也可以使用前置取地址操作符&来获取一个可寻址的值的地址。 对于一 个类型为T的可寻址的值t,我们可以用&t来取得它的地址。&t的类型为 *T。 一般说来,一个可寻址的值是指被放置在内存中某固定位置处的一个值(但放置在 某固定位置处的一个值并非一定是可寻址的)。 目前,我们只需知道所有变量都是 第15章:指针 121 可以寻址的;但是所有常量、函数返回值和强制转换结果都是不可寻址的。 当一个 变量被声0 码力 | 591 页 | 21.40 MB | 1 年前3
共 25 条
- 1
- 2
- 3














