[讨论][求助]又是招聘题,不买也要看一看啊
#include<iostream.h>void main()
{
int p[][3]={{1,2,3},{4,5,6},{7,8,60}};
int *q = p[1]+6;
int *t = p[1]+5;
cout<<*q<<endl;
cout<<*t<<endl;
}
结果1245120
60
说明原理
我调试了一下这个程序,但是结果好象是一些随机数。我试着改为:
#include <iostream.h>
void main()
{
int p[][3]={(1,2,3),(4,5,6),(7,8,60)};
int *q;
int *t;
q=p[1]+1;
t=p[1]+2;
cout<<*q<<endl;
cout<<*t<<endl;
}
结果得不到5,6,
而是得到4208505和1。这是怎么回事啊?
首先说#include <iostream.h>
引用此文件是为了调用后面的字符留命令cout和cin方便
接下来是定义了一个没有行限制的2维数组.
而q和t是定义了两个指向次二维数组某一行的两个指针
p[1]代表的是数组的第二行的首地址,而再+数字的话就表示指针的相对移动.如:如果p[1]代表的是4的话那么p[1]+2则指向6,p[1]+4则指向8;
对于*q的输出p[1]+6 按上面所说应该是指向60的下一位 所以应该是溢出 ,溢出后系统则随即给一个数(不一定是什么数) ;对于p[1]+5则正好指向了60,所以输出为60
至于p[1]+1和p[1]+2为什么输出不是5和6就不太懂了