返回列表 回复 发帖

c++术语和概念问题求助

本帖最后由 b5606018 于 2011-9-5 23:57 编辑

老师们好  我有几个问题要向您请教下  一、术语:指针越界:网上查阅指针越界的意思是超出指针的作用范围  能否更详细讲解些呢? 二、堆栈溢出:百度百科上讲堆栈溢出会覆盖原有的代码 那么它是往哪方向覆盖呢?比如:覆盖前面的还是后面?       谢谢老师{:3_52:}
1# b5606018


先说指针越界。指针是一个很好的东西,操作内存很方便。但是每个指针都有活动的范围。例如,一个数组的指针,指针指向的位置,就应该数组所保存的内容。但是,很多时候操作不小心,就让指针指向数组以外的内存了,这个时候就是指针越界了。

堆栈溢出实际比较类似。每个堆栈的大小都是有限的,不可能无限大。当存储的东西超过堆栈允许保存的最大范围,存储的东西就会覆盖堆栈外的东西。这就造成了堆栈溢出。就像一个杯子倒的水太多了,就会溢出一样。
嗯  谢谢 老师{:3_52:}
老师 嘿嘿 又有几个问题  P118页的几个术语我想问下到底这几个术语是错的 : 多级指针、多级间指、多级间址这三个概念都存在吗?
4# b5606018


你可以看一下勘误表,这几个错已经勘误了。

勘误表在勘误区那里可以下载。
老师  可是我在P117页又看到两个不对称的术语 倒数第4行有个单级间址 而倒数却来了个二级间指  主要是这两个到底哪个间指(间址)是对的?
6# b5606018


这里应该是单级指针和二级指针。
嗯 谢谢  老师{:3_52:}这么讲又有处错误啦  嘿嘿
老师{:3_46:}  有个问题   P119页示例7-17上面一段:赋值时,若左值不带*,则只能赋予地址;否则只能赋予变量内容  而在示例7-17中int  *p1=&ival   //取变量地址   这个算赋予地址吗?是不是与上面那句话矛盾? 还有就是与上面所讲的格式不一样  多了个*号  是上面有错吗?还是下面错了?
9# b5606018


这里没有错。
int  *p1=&ival;
有另外一种写法:

int* p1=&ival;

两个写法区别就在于*是靠变量近,还是靠int近。这是声明语句,在声明语句中 int*是一个整理用来申明定义了一个整型变量。这里的*是数据类型的一部分,并不是取值运算符。
*p=ival;
这里的*才是取值运算符。
哦 谢谢 老师{:3_52:}
本帖最后由 b5606018 于 2011-9-14 12:17 编辑

你好  老师  P136页注意:如果利用存储地址、指针等方式来访问数组,可以提高数据访问的效率。
      这句话不明白,直接访问不是比间接访问更效率吗? 利用指针这些间接的访问方式比直接的更快?
本帖最后由 b5606018 于 2011-9-14 12:16 编辑

你好  老师  P136页分析array_1的定义中的array_1[0][1]的值是2,同理array_1[1][1]的值是5。
这里的2和5 是怎么求出来的?
你好 老师 P134页示例8-7  float x[array_size];
                       x[0]=0.5
                       x[1]=1.5
                       x[2]=2.5
这里的0.5、1.5、2.5是怎么求出的?
12# b5606018


指针实际是直接访问物理地址,这个速度更快。打一个比方,说一下你就理解了。

假设,你去图书馆借一本金庸小说。你问管理员,金庸小说在哪个书架上。他给你回答在小说专架上。你首先需要找小说专家在那里。  
但是,管理员告诉你在第三排书架上,你直接走过去,就可以找到。

小说专架就是第三排书架的名称。   

从这点,就可以看出哪个更快捷吧。
返回列表