Board logo

标题: c++术语和概念问题求助 [打印本页]

作者: b5606018    时间: 2011-9-5 23:56     标题: c++术语和概念问题求助

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

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

1# b5606018


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

堆栈溢出实际比较类似。每个堆栈的大小都是有限的,不可能无限大。当存储的东西超过堆栈允许保存的最大范围,存储的东西就会覆盖堆栈外的东西。这就造成了堆栈溢出。就像一个杯子倒的水太多了,就会溢出一样。
作者: b5606018    时间: 2011-9-6 10:42

嗯  谢谢 老师{:3_52:}
作者: b5606018    时间: 2011-9-6 19:12

老师 嘿嘿 又有几个问题  P118页的几个术语我想问下到底这几个术语是错的 : 多级指针、多级间指、多级间址这三个概念都存在吗?
作者: fwbook    时间: 2011-9-7 10:32

4# b5606018


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

勘误表在勘误区那里可以下载。
作者: b5606018    时间: 2011-9-7 13:29

老师  可是我在P117页又看到两个不对称的术语 倒数第4行有个单级间址 而倒数却来了个二级间指  主要是这两个到底哪个间指(间址)是对的?
作者: fwbook    时间: 2011-9-8 08:35

6# b5606018


这里应该是单级指针和二级指针。
作者: b5606018    时间: 2011-9-8 09:27

嗯 谢谢  老师{:3_52:}这么讲又有处错误啦  嘿嘿
作者: b5606018    时间: 2011-9-8 12:59

老师{:3_46:}  有个问题   P119页示例7-17上面一段:赋值时,若左值不带*,则只能赋予地址;否则只能赋予变量内容  而在示例7-17中int  *p1=&ival   //取变量地址   这个算赋予地址吗?是不是与上面那句话矛盾? 还有就是与上面所讲的格式不一样  多了个*号  是上面有错吗?还是下面错了?
作者: fwbook    时间: 2011-9-9 08:39

9# b5606018


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

int* p1=&ival;

两个写法区别就在于*是靠变量近,还是靠int近。这是声明语句,在声明语句中 int*是一个整理用来申明定义了一个整型变量。这里的*是数据类型的一部分,并不是取值运算符。
*p=ival;
这里的*才是取值运算符。
作者: b5606018    时间: 2011-9-9 17:24

哦 谢谢 老师{:3_52:}
作者: b5606018    时间: 2011-9-14 12:00

本帖最后由 b5606018 于 2011-9-14 12:17 编辑

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

本帖最后由 b5606018 于 2011-9-14 12:16 编辑

你好  老师  P136页分析array_1的定义中的array_1[0][1]的值是2,同理array_1[1][1]的值是5。
这里的2和5 是怎么求出来的?
作者: b5606018    时间: 2011-9-14 12:16

你好 老师 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是怎么求出的?
作者: fwbook    时间: 2011-9-15 09:07

12# b5606018


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

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

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

从这点,就可以看出哪个更快捷吧。
作者: fwbook    时间: 2011-9-15 09:11

13# b5606018


实际这是数组的赋值的方式。

对于array_1[2][3]赋值,值是按照
array_1[0][0]、array_1[0][1]、array_1[0][2]
array_1[1][0]、array_1[1][1]、array_1[1][2]
的顺序进行填充。
作者: fwbook    时间: 2011-9-15 09:12

14# b5606018


这三个值不是求出来的,而是作者直接给这三个数组元素进行赋值的。
作者: b5606018    时间: 2011-9-15 20:09

老师16#  
array_1[0][0]、array_1[0][1]、array_1[0][2]
array_1[1][0]、array_1[1][1]、array_1[1][2]

这里只是针对书上讲的吗?如果有很多维数  那就是讲格式可以是这样:
array_1[0][0]、array_1[0][1]、array_1[0][2]、array_1[0][3]
array_1[1][0]、array_1[1][1]、array_1[1][2]、array_1[1][3]  对吗?
作者: fwbook    时间: 2011-9-16 09:19

18# b5606018


可以。就是从第一个元素开始赋值。
作者: b5606018    时间: 2011-9-16 09:29

哦哦  谢谢 老师{:3_52:}




欢迎光临 万卷图书 (http://wanjuanchina.net/) Powered by Discuz! 7.0.0