怎么理解 循环队列满 里面的指针? 明明就是int型的,怎么还说指针呢?

为什么队列的队头队尾指针的类型是int_百度知道
为什么队列的队头队尾指针的类型是int
为什么叫做指针,明明不是指针类型
提问者采纳
那么使用2个整数分别表明队列头和队列尾的索引就很正常了,而不是C语言意义里的指针这个要看你的队列是怎么实现的。如果是使用整数数组实现的——使用整数数组来实现循环队列是很常见的一种实现方式,就表明指明一个位置。我想这里的所谓队头队尾的“指针”是自然语言的指针
提问者评价
哦,原来是这样,现在明白了。之前一直很纠结,为什么明明不是指针,却叫做指针。。。
其他类似问题
为您推荐:
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁c语言指针怎么理解,什么时候会用到指针,要注意哪些方面_百度知道
c语言指针怎么理解,什么时候会用到指针,要注意哪些方面
尽量通俗些,详细些。还有要注意哪些要点什么的,不要抄来的,因为我自学看书没理解
提问者采纳
*p=15,这样计算机会把15当成地址存放到p变量中.子程序如果参数是指针型的,但a和p是不同的在编译器眼中;后p指针就指向a[4],*p=a,然后把数据区或数组的某个单元的地址赋值给指针变量,否则得到的数据就是不靠谱的,它是用来找数的cpu自己有运算器和寄存器,编译器会知道用数据区的首地址来替换操作,通过总线与存储器件相连.指针存放地址用.指针访问数据区一般需要程序来控制不要越界.举例来说。(应该类似,然后根据首地址再加上偏移量来访问整个数据;中a和p都是指针(地址):int a[10]。用指针p访问a数组的好处是,这个临时变量可以进行操作; f(p),s[10]={ 0,运算完成后再送出到存储区; p=&a[3],需要将数据冲存储器件上面将参与运算的数据读入,我们管这个编号叫存储地址,15.指针的定义只是开设了可以访问数据区或数组的变量。如;就相当于a[3]=5:p=s+1,不是存储实际数据的,如a++,除非你能确认地址比较的结果肯定是你想要的,如,是一个标记;就是取数组a的第4个单元的地址给p,但作为记号的a就不能在程序中操作了,那么p就拿到了这个单元的地址,你不能让指针超出这10个单元的范围。
在操作大块数据时;等,往往出问题的是,称为指针型变量:int *p=15;的p指针赋值有问题.指针存放的地址最好不要用来与其他地址比较,赋值时需要取相应存储区的地址,数组就定义好了,a是一个数据区的首地址; } main() { p=a; a=p,而是使p指向某数据后可以p++或p--来访问前一个或后一个数据,而p是你自己程序开设的变量:1。3,p=&a[3]; p=a; int f(int *s) { s++,*p=5。
比如,变量p是存放地址的,指针还没有赋值就用来操作,你程序中使用a时,不用每次计算a加多少偏移访问数据,{0} }。4,*p,不要认定义了能访问数组的指针,在你程序中写a[3]时,*p,计算机就会取a数组对应的首地址再加3个整型偏移量来访问相应数据,在程序中要注意这点。5;)2;a就是一个拥有10个整型数据的数据区的首地址,数据区和数组需要你的程序另行开设,或用指针来存放数据,一般记录首地址(数组指针),比如定义了10个单元的数据区:int a[10];的操作,可以在程序中操作比如p++;就是错的了,需要指定这个单元的编号。
注意,但不会返回给调用者的指针型变量; }s再怎么加减都不会影响p,以后用*p访问得到的数据就不是你想要的数据了。那么cpu读入时需要访问存储器件的某个单元。6,这个参数由子程序开设的指针型临时变量存储,p++,int a[10],在执行运算时
提问者评价
感谢各位耐心解答
其他类似问题
按默认排序
其他7条回答
不然容易弄成野指针,把衣物放在里面。就像我们去公共浴室洗澡,打个比方,看到编号我们就知道要去找这个编号的衣柜。钥匙上保存了编号---------根据编号找到衣柜---------拿出衣柜里的衣服指针-------------------------------地址-------------------------数据要注意的是指针要用完释放。洗完澡我们要拿着钥匙去找柜子拿衣服。还有指针指向的内容很多地方都可以用到指针,买票要给个有编号的钥匙
指针可以理解为一张 写有变量或函数入口或结构体具体存放位置地址 的纸条,如果把内存比作一栋大楼,那么纸条上写得就是第几层楼第几号室。使用指针的意思就是自己根据纸条上地址,找到对应的房间,并对房间里面的东西取出来做出你需要的操作。用到指针的情况很多,最常见的是被调用函数返回多个参数时会用到;制作各种链表会用到;访问结构体成员会用到;手动动态分配使用内存会用到;一些特定的结构体变量类型会用到(如 FILE)为提高程序执行效率也会特意使用指针(包含很多种情况,不再赘述);等等等等要注意的地方也很多,很难说完,常见的就以下几种(我能想到的):1.指针变量和普通变量概念使用方式相混淆2.指针变量的赋值(初始化,传递地址)方式有误3.指针变量的类型与所指元素的类型不一致4.指针移动不恰当5.指针在使用过程中发生了不必要的导致错误的改变6.多重的指针指向指针,导致形成难以理清的逻辑关系还有很多其他情况,在不同的使用环境下,指针会产生一些特定的要注意的问题;归根结底是C语言指针太灵活了,能做得事非常多,代价就是产生问题的原因也是很灵活的,一一列举几乎是不可能的。希望对你有所帮助
说实话吧,c语言的精髓就是指针,你的这个问题,没有谁能帮你解决,去看看书吧 推荐
《c和指针》讲解的挺详细,自学的难度是有点大,这是大一的课程,你呢?是、、、
指针是按一定规律操作大量的变量时用的,你想象如果你有一个数组,你要操作数组中一个特定元素,但是这个元素的下标是个变量,那你就离指针不远了,实际上指针名就是一个真正的数组名,要想纯熟得理解和运用指针,最好看看数据结构的书
c语言指针就是内存地址。既然是内存地址当然可以用它来访问内存。所以当你要对内存进行读、写或分配、释放的时候会用到。甚至可以用函数指针来访问函数。要注意的东西一时说不全,这个需要自己实践总结。
就是数据的地址。 通过指针,可以向这个地址写入数据,或者读取数据。p是地址, *p就是地址的内容。
那哪些地方会用到指针呢
变量或函数都是有地址的。所有用到地址的就有指针。数据指针,数组指针,动态分配的空间地址指针,函数指针,结构指针, 参数传递等等,可以说所有的地方都用到了指针。
个人理解指针就是地址,不过这个地址是有类型的,比如一个int型的指针,int指的是该指针指向的那块内存存放的内容是一个int型的数据。或者也可以把指针的类型简单的看作是这个指针所能管到的内存的大小,如一个int类型的指针可以管4个字节,char类型的可以管1个字节。
您可能关注的推广
为您推荐:
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁关于int型指针和char型指针相互转化的问题
[问题点数:10分,结帖人danxuezx]
关于int型指针和char型指针相互转化的问题
[问题点数:10分,结帖人danxuezx]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
相关帖子推荐:
2008年10月 Delphi大版内专家分月排行榜第三
本帖子已过去太久远了,不再提供回复功能。什么是指针?
[问题点数:40分,结帖人yqj2065]
什么是指针?
[问题点数:40分,结帖人yqj2065]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
相关帖子推荐:
2013年 总版技术专家分年内排行榜第三
2012年 总版技术专家分年内排行榜第七
2013年 总版技术专家分年内排行榜第三
2012年 总版技术专家分年内排行榜第七
2013年 总版技术专家分年内排行榜第三
2012年 总版技术专家分年内排行榜第七
2013年 总版技术专家分年内排行榜第三
2012年 总版技术专家分年内排行榜第七
匿名用户不能发表回复!|
每天回帖即可获得10分可用分!小技巧:
你还可以输入10000个字符
(Ctrl+Enter)
请遵守CSDN,不得违反国家法律法规。
转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。实现队列的方法很多,比如动态数组、链表,今天主要介绍循环队列
首先说用静态数组实现简单队列。
很显然,当队列满后,即便全部元素都出队,队列还是满的状态。这种情况就叫做“假溢出”,即数组中明明有可用空间,但却无法使用。
这是由定长数组的特性决定的。但我们可用改变一下思路,当队尾指针指向数组最后一个位置时,如果再有数据入队,并且队头指针没有指向数组的第一个元素,那么就让队为指针绕回到数组头部。这样就形成了一个逻辑上的环。
这样,只要队列中实际的元素数量小于数组长度减一,就可以继续入队了。
其实这是一个非常简单的数据结构,难点就是判断队空、对满,以及计算队列长度。
&1const&int&MAX_QUEUE_SIZE&=&<span style="color: #;
&2template&typename&T&
&3class&cyc_queue
&6&&&&cyc_queue()
&7&&&&&&&&:m_nHead(<span style="color: #),
&8&&&&&&&&m_nTail(<span style="color: #)
<span style="color: #
<span style="color: #
<span style="color: #&&&&//如对操作,&将数据追加到队列头部,并改变队首指针,如队成功,则返回true
<span style="color: #&&&&bool&in_queue(const&T&&&data)
<span style="color: #&&&&{
<span style="color: #&&&&&&&&if(full())
<span style="color: #&&&&&&&&//队列满
<span style="color: #&&&&&&&&{
<span style="color: #&&&&&&&&&&&&return&false;
<span style="color: #&&&&&&&&}
<span style="color: #
<span style="color: #&&&&&&&&m_array[m_nTail]&=&
<span style="color: #&&&&&&&&m_nTail&=&(m_nTail&+&<span style="color: #)&%&MAX_QUEUE_SIZE;
<span style="color: #&&&&}
<span style="color: #
<span style="color: #&&&&//出队操作,将队首数据复制并返回,改变队首指针
<span style="color: #&&&&T&out_queue()
<span style="color: #&&&&{
<span style="color: #&&&&&&&&if(empty())
<span style="color: #&&&&&&&&{
<span style="color: #&&&&&&&&&&&&throw("队列已空");
<span style="color: #&&&&&&&&}
<span style="color: #&&&&&&&&
<span style="color: #&&&&&&&&T&temp&=&m_array[m_nHead];
<span style="color: #&&&&&&&&m_nHead&=&(m_nHead&+&<span style="color: #)&%&MAX_QUEUE_SIZE;
<span style="color: #&&&&&&&&return&
<span style="color: #&&&&}
<span style="color: #
<span style="color: #&&&&bool&empty()
<span style="color: #&&&&{
<span style="color: #
<span style="color: #&&&&&&&&return&m_nTail&==&m_nH
<span style="color: #&&&&}
<span style="color: #
<span style="color: #&&&&bool&full()
<span style="color: #&&&&{
<span style="color: #&&&&&&&&return&(m_nTail&+&<span style="color: #)&%&MAX_QUEUE_SIZE&==&m_nH
<span style="color: #&&&&}
<span style="color: #
<span style="color: #&&&&size_t&size()
<span style="color: #&&&&{
<span style="color: #&&&&&&&&return&(m_nTail&-&m_nHead&+&MAX_QUEUE_SIZE)&%&MAX_QUEUE_SIZE;
<span style="color: #&&&&}
<span style="color: #private:
<span style="color: #&&&&T&m_array[MAX_QUEUE_SIZE];
<span style="color: #&&&&int&m_nH
<span style="color: #&&&&int&m_nT
<span style="color: #};
阅读(...) 评论()

我要回帖

更多关于 循环队列满 的文章

 

随机推荐