返回列表 回复 发帖
1# b5606018


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

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


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

勘误表在勘误区那里可以下载。
6# b5606018


这里应该是单级指针和二级指针。
9# b5606018


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

int* p1=&ival;

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


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

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

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

从这点,就可以看出哪个更快捷吧。
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]
的顺序进行填充。
14# b5606018


这三个值不是求出来的,而是作者直接给这三个数组元素进行赋值的。
18# b5606018


可以。就是从第一个元素开始赋值。
返回列表