指针与数组的区别和联系是什么?指针与数组之间的恩恩怨怨
很多初学者弄不清指针和数组到底有什么样的关系 。我现在就告诉你:他们之间没有
任何关系!只是他们经常穿着相似的衣服来逗你玩罢了 。
指针就是指针,指针变量在32 位系统下,永远占4 个byte,其值为某一个内存的地址 。
指针可以指向任何地方,但是不是任何地方你都能通过这个指针变量访问到 。
数组就是数组,其大小与元素的类型和个数有关 。定义数组时必须指定其元素的类型
和个数 。数组可以存任何类型的数据,但不能存函数 。
既然它们之间没有任何关系,那为何很多人把数组和指针混淆呢?甚至很多人认为指
针和数组是一样的 。这就与市面上的C 语言的书有关,几乎没有一本书把这个问题讲透彻,
讲明白了 。
指针和数组的对比
指针
保存数据的地址,任何存入指针变量p 的数据都会被当作地址来处理 。p 本身的地址由编译器另外存储,存储在哪里 , 我们并不知间接访问数据,首先取得指针变量p 的内容,把它作为地址,然后从这个地址提取数据或向这个地址写入数据 。指针可以以指针的形式访问*(p+i);也可以以下标的形式访问p[i] 。但其本质都是先取p 的内容然后加上i*sizeof(类型)个byte 作为数据的真正地址 。通常用于动态数据结构通相关的函数为malloc 和free 。通常指向匿名数据(当然也可指向具名数据)
数组
保存数据,数组名a 代表的是数组首元素的首地址而不是数组的首地址 。a 才是整个数组的首地址 。a 本身的地址由编译器另外存储,存储在哪里,我们并不知道 。直接访问数据,数组名a 是整个数组的名字,数组内每个元素并没有名字 。只能通过“具名+匿名”的方式来访问其某个元素,不能把数组当一个整体来进行读写操作 。数组可以以指针的形式访问*(a+i);也可以以下标的形
式访问a[i] 。但其本质都是a 所代表的数组首元素的首地址加上i*sizeof(类型)个byte 作为数据的真正地址 。通常用于存储固定数目且数据类型相同的元素 。隐式分配和删除自身即为数组名
Go语言如何给字符串排序因为char *strings[]不是指针而是指针数组,那么
temp = strings[top];
strings[top] = strings[seek];
strings[seek] = temp;
这种交换交换的就是主调函数中的数组中的指针,把指向字符串的指针顺序改变了,当然按次序输出就达到排序目的了……
go语言循环队列的实现队列的概念在 顺序队列 中 , 而使用循环队列的目的主要是规避假溢出造成的空间浪费 , 在使用循环队列处理假溢出时,主要有三种解决方案
本文提供后两种解决方案 。
顺序队和循环队列是一种特殊的线性表,与顺序栈类似,都是使用一组地址连续的存储单元依次存放自队头到队尾的数据元素,同时附设队头(front)和队尾(rear)两个指针,但我们要明白一点,这个指针并不是指针变量 , 而是用来表示数组当中元素下标的位置 。
本文使用切片来完成的循环队列 , 由于一开始使用三个参数的make关键字创建切片,在输出的结果中不包含nil值(看起来很舒服) , 而且在验证的过程中发现使用append()函数时切片内置的cap会发生变化,在消除了种种障碍后得到了一个四不像的循环队列 , 即设置的指针是顺序队列的指针,但实际上进行的操作是顺序队列的操作 。最后是对make()函数和append()函数的一些使用体验和小结,队列的应用放在链队好了 。
官方描述(片段)
推荐阅读
- 电子宠物养成类游戏,电子宠物狗游戏
- 王者什么连招最厉害视频,王者荣耀连招技巧攻略汇总
- 平板pdf如何一张放2页,平板pdf双页显示
- go语言怎么发送信息 go语言怎么发送信息到微信
- sapcpa的简单介绍
- 拳皇格斗如何下载游戏,拳皇怎么下载?
- linux网络流量的命令 linux 网络流量查看
- html中js关键字不变色,js在html中不起作用
- e-mail营销有何特点市场如何,email营销在国内的应用情况如何