标题:
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