指针数组

go 学习笔记之数组还是切片都没什么不一样

泄露秘密 提交于 2019-11-27 19:39:07
上篇文章中详细介绍了 Go 的基础语言,指出了 Go 和其他主流的编程语言的差异性,比较侧重于语法细节,相信只要稍加记忆就能轻松从已有的编程语言切换到 Go 语言的编程习惯中,尽管这种切换可能并不是特别顺畅,但多加练习尤其是多多试错,总是可以慢慢感受 Go 语言之美! 在学习 Go 的内建容器前,同样的,我们先简单回顾一下 Go 的基本语言,温度而知新可以为师矣! 上节知识回顾 如需了解详情,请于微信公众号[雪之梦技术驿站]内查看 go 学习笔记之值得特别关注的基础语法有哪些 文章,觉得有用的话,顺手转发一下呗! 内建类型种类 bool 布尔类型,可选 true|false ,默认初始化零值 false . (u)int , (u)int8 , (u)int16 , (u)int32 , (u)int64 , uintptr 2^0=1 , 2^1=2 , 2^2=4 个 字节 长度的整型,包括有符号整型和无符号整型以及 uintptr 类型的指针类型,默认初始化零值 0 . byte(uint8) , rune(int32) , string byte 是最基础 字节 类型,是 uint8 类型的 别名 ,而 rune 是 Go 中的 字符 类型,是 int32 的别名.最常用的字符串类型 string 应该不用介绍了吧? float32 , float64 ,

es6 -- Iterator 和 for...of 循环

a 夏天 提交于 2019-11-27 19:32:29
1:Iterator(遍历器)的概念 JavaScript 原有的表示“ 集合 ”的数据结构,主要是 数组( Array ) 和 对象( Object ) ,ES6 又添加了 Map 和 Set 。这样就有了四种数据集合,用户还可以组合使用它们,定义自己的数据结构,比如数组的成员是 Map , Map 的成员是对象。这样就需要一种统一的接口机制,来处理所有不同的数据结构。 遍历器(Iterator)就是这样一种机制。它是一种接口,为各种不同的数据结构提供统一的访问机制。任何数据结构只要部署 Iterator 接口,就可以完成遍历操作(即依次处理该数据结构的所有成员)。 Iterator 的作用有 三个: 一 是为各种数据结构 , 提供一个统一的、简便的访问接口 ; 二 是使得数据结构的成员能够按某种次序排列;三是 ES6 创造了一种新的遍历命令 for...of 循环,Iterator 接口主要供 for...of 消费。 Iterator 的遍历过程是这样的 。 (1) 创建一个指针对象,指向当前数据结构的起始位置。也就是说,遍历器对象本质上,就是一个指针对象。 (2) 第一次调用指针对象的 next 方法,可以将指针指向数据结构的第一个成员。 (3) 第二次调用指针对象的 next 方法,指针就指向数据结构的第二个成员。 (4) 不断调用指针对象的 next 方法

C语言程序设计(十)

孤者浪人 提交于 2019-11-27 18:47:41
第十章 字符串 字符串常量是由一对双引号括起来的一个 字符串序列 字符串实际就是由若干个有效数字构成且以字符'\0'作为结束的一个字符序列 C语言没有提供字符串数据类型,因此字符串的存取要用 字符型数组 来实现 字符型数组是由字符构成的数组,仅当其最后一个元素是'\0'时才表示字符串 字符串结束标志'\0'也占一个字节的内存,但 它不计入字符串的实际长度,只计入数组的长度 正确写法: char str[6] = {'H','e','l','l','o','\0'}; char str[] = {'H','e','l','l','o','\0'}; char str[] = {"hello"}; char str[] = "hello"; 编译系统会根据字符串中字符的个数来确定数组的大小 数组的大小为字符串中实际字符的个数加1 多个字符串需要存放在二维字符数组中 数组第一维的长度代表要存储的字符串的个数,可以省略 但是 第二维的长度不能省略 字符指针:指向字符型数据的指针变量 只要将字符串的首地址赋值给字符指针,即可让字符指针指向一个字符串 字符串常量本身代表的就是存放它的常量存储区的首地址,是一个地址常量 char *ptr = "Hello"; 等价于 char *par; ptr = "Hello"; /* 将保存在常量存储区中的"Hello"的首地址赋值给ptr

队列:队列在线程池等有限资源池中的应用

三世轮回 提交于 2019-11-27 16:01:34
1.理解队列? 典型队列,先进者先出的结构,是一种操作受限的线性数据结构。 队列类似栈,基本操作也有两个,入列(尾部插入数据)和出列(头部取出数据) 2.实现队列的方式 类似栈,也可以使用数组和链表来实现队列, 顺序队列:使用数组来实现队列 // 用数组实现的队列 public class ArrayQueue { // 数组:items,数组大小:n private String[] items; private int n = 0; // head 表示队头下标,tail 表示队尾下标 private int head = 0; private int tail = 0; // 申请一个大小为 capacity 的数组 public ArrayQueue(int capacity) { items = new String[capacity]; n = capacity; } // 入队 public boolean enqueue(String item) { // 如果 tail == n 表示队列已经满了 if (tail == n) return false; items[tail] = item; ++tail; return true; } // 出队 public String dequeue() { // 如果 head == tail 表示队列为空 if

C语言-再论指针与数组

白昼怎懂夜的黑 提交于 2019-11-27 15:55:53
指针与数组的天生姻缘 1、以指针方式来访问数组元素 (1)、数组元素使用时不能整体访问,只能是单个访问。访问形式有两种:数组形式和指针形式。 (2)、数组形式访问数组元素:数组名[下标];(下标从0开始 (3)、指针格式访问数组元素:*(指针+偏移量); (4)、数组下标方式和指针方式均可以访问数组元素,两者的实质是一样的。在编译器内部都是用指针方式来访问数组的, 数组下标方式只是编译器给编程者提供了一种壳而已。所以用指针方式来访问数组才是本质的做法。 2、从内存角度理解指针访问数组的实质 (1)、数组的特点就是:数组中各个元素的地址是依次相连的,而且数组还有一个很大的特点就是数组中各个元素的类型 比较相同。类型相同就决定了每个数组元素占几个字节是相同的。 (2)、数组中的元素其实就是地址相连接、占地大小相同的一串内存空间。 这两个特点就决定了只要知道数组中一个元素的地址,就可以很容易推算出其他元素的地址。 3、指针与数组类型的匹配问题 (1)、int *p; int a[5]; p = a; //类型匹配,a做右值等同于&a[0]; (2)、int *p; int a[5]; p = &a; //类型不匹配,p是int *,&a是整个数组的指针,也就是一个数组指针类型,不是 int指针类型,所以不匹配。 (3)、&a、a、&a[0]从数值上看是完全相等的,但是从意义上看就不同了

队列:队列在线程池等有限资源池中的应用

陌路散爱 提交于 2019-11-27 15:49:03
1.理解队列? 典型队列,先进者先出的结构,是一种操作受限的线性数据结构。 队列类似栈,基本操作也有两个,入列(尾部插入数据)和出列(头部取出数据) 2.实现队列的方式 类似栈,也可以使用数组和链表来实现队列, 顺序队列:使用数组来实现队列 // 用数组实现的队列 public class ArrayQueue { // 数组:items,数组大小:n private String[] items; private int n = 0; // head 表示队头下标,tail 表示队尾下标 private int head = 0; private int tail = 0; // 申请一个大小为 capacity 的数组 public ArrayQueue(int capacity) { items = new String[capacity]; n = capacity; } // 入队 public boolean enqueue(String item) { // 如果 tail == n 表示队列已经满了 if (tail == n) return false; items[tail] = item; ++tail; return true; } // 出队 public String dequeue() { // 如果 head == tail 表示队列为空 if

go 学习笔记之值得特别关注的基础语法有哪些

a 夏天 提交于 2019-11-27 15:17:20
在上篇文章中,我们动手亲自编写了第一个 Go 语言版本的 Hello World ,并且认识了 Go 语言中有意思的变量和不安分的常量. 相信通过上篇文章的斐波那契数列,你已经初步掌握了 Go 语言的变量和常量与其他主要的编程语言的异同,为了接下来更好的学习和掌握 Go 的基础语法,下面先简单回顾一下变量和常量相关知识. 有意思的变量和不安分的常量 变量默认初始化有零值 func TestVariableZeroValue(t *testing.T) { var a int var s string // 0 t.Log(a, s) // 0 "" t.Logf("%d %q", a, s) } int 类型的变量初始化默认零值是零 0 , string 类型的变量默认初始化零值是空字符串 ` `,其他类型也有相应的零值. 多个变量可以同时赋值 func TestVariableInitialValue(t *testing.T) { var a, b int = 1, 2 var s string = "hello Go" // 1 2 hello Go t.Log(a, b, s) } 其他主要的编程语言大多支持多个变量初始化,但极少数有像 Go 语言这样,不仅支持同时初始化,还可以同时赋值. 多个变量可以用小括号 () 统一定义 func

指针理解(新手文章,勿近)

亡梦爱人 提交于 2019-11-27 15:08:20
目录 指针理解 指针理解 ​ 想要真正的详解的,请看 大佬 重要性 ​ 真正的灵魂,没有指针就没有C语言,虽然我用C的时间并不算长,但可以真切的发现这点 定义 ​ 指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址。它可以指向另外一个内存地址 大招理解 int p; //这是一个普通的整型变量 int *p; //首先从P 处开始,先与*结合,所以说明P 是一个指针,然后再与int 结合,说明指针所指向的内容的类型为int 型.所以P是一个返回整型数据的指针 int p[3]; //首先从P 处开始,先与[]结合,说明P 是一个数组,然后与int 结合,说明数组里的元素是整型的,所以P 是一个由整型数据组成的数组 int *p[3]; //首先从P 处开始,先与[]结合,因为其优先级比*高,所以P 是一个数组,然后再与*结合,说明数组里的元素是指针类型,然后再与int 结合,说明指针所指向的内容的类型是整型的,所以P 是一个由返回整型数据的指针所组成的数组 int (*p)[3]; //首先从P 处开始,先与*结合,说明P 是一个指针然后再与[]结合(与"()"这步可以忽略,只是为了改变优先级),说明指针所指向的内容是一个数组,然后再与int 结合,说明数组里的元素是整型的.所以P 是一个指向由整型数据组成的数组的指针 int **p; //首先从P 开始,先与*结合

sizeof()用法汇总

筅森魡賤 提交于 2019-11-27 13:52:26
sizeof()功能:计算数据空间的字节数 1.与strlen()比较 strlen()计算字符数组的字符数,以"\0"为结束判断,不计算为'\0'的数组元素。 而sizeof计算数据(包括数组、变量、类型、结构体等)所占内存空间,用字节数表示。 2.指针与静态数组的sizeof操作 指针均可看为变量类型的一种。所有指针变量的sizeof 操作结果均为4。 注意 :int *p; sizeof(p)=4; 但sizeof(*p)相当于sizeof(int); 对于静态数组,sizeof可直接计算数组大小; 例:int a[10];char b[]="hello"; sizeof(a)等于4*10=40; sizeof(b)等于6; 注意 :数组做型参时,数组名称当作指针使用!! void fun(char p[]) {sizeof(p)等于4} 经典问题: double* (*a)[3][6]; cout<<sizeof(a)<<endl; // 4 a为指针 cout<<sizeof(*a)<<endl; // 72 *a为一个有3*6个指针元素的数组 cout<<sizeof(**a)<<endl; // 24 **a为数组一维的6个指针 cout<<sizeof(***a)<<endl; // 4 ***a为一维的第一个指针 cout<<sizeof(****a)<<endl

sizeof和sizeof(string)的问题

╄→尐↘猪︶ㄣ 提交于 2019-11-27 13:50:01
今天看《程序员面试宝典》一书(为了应付将要到来的微软笔试),看到了sizeof(string)这个问题。在Dev C++上测试的结果是4,很不明白。上网搜了一下,得到如下结果: string strArr1[]={"Trend", "Micro", "Soft"}; sizeof(strArr1)=12 转自: http://apps.hi.baidu.com/share/detail/30398570 关于sizeof(string),今天看那本面试宝典的时候看到这个表达式,有点吃惊,书上写着sizeof(string)=4;当时很纳闷,难道分配4个字节大小的内存给string吗?查阅了相关资料得出结论: string的实现在各库中可能有所不同,但是在同一库中相同一点是,无论你的string里放多长的字符串,它的sizeof()都是固定的,字符串所占的空间是从堆中动态分配的,与sizeof()无关。 sizeof(string)=4可能是最典型的实现之一,不过也有sizeof()为12、32字节的库实现。 但是VC6.0测试后sizeof(string)=16.还是跟编译器有关 #include<iostream> using namespace std; void main(void) { string a[] = {"aaaaa","bbbb","ccc"}; int x =