| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 566 人关注过本帖
标题:[讨论][求助]又是招聘题,不买也要看一看啊
只看楼主 加入收藏
jdytz
Rank: 2
等 级:新手上路
威 望:3
帖 子:104
专家分:0
注 册:2005-4-24
收藏
 问题点数:0 回复次数:6 
[讨论][求助]又是招聘题,不买也要看一看啊
#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
说明原理
搜索更多相关主题的帖子: 招聘 
2005-11-18 00:03
swk6100
Rank: 1
等 级:新手上路
帖 子:33
专家分:0
注 册:2005-8-11
收藏
得分:0 
对于cout<<*q<<endl;的输出,我认为那是程序找不到对应的内存空间中所含的数,所以随机分配一个.
对于p[][3]的定义,系统分配空间时,是在内存中选择一段连续的空间,p[1]表示的是从4开始的那段内存空间,而p[1]+1则是从5开始的那段字符串,所以到60为止,只会出现到p[1]+5的地址,没有+6的了

2005-11-18 00:26
zfl0109
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2005-11-17
收藏
得分:0 
为什么我调试得不出这个结果啊?

我调试了一下这个程序,但是结果好象是一些随机数。我试着改为:
#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。这是怎么回事啊?


为了所有我爱的和爱我的人加油!
2005-11-18 01:18
volcanor
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2005-9-30
收藏
得分:0 
p[1],是指向第二行的首地址,p[1]+1则是将这个指针指向下一位,+2,+3,依次类推,当p[1]+5时,指针指向p[2][2],所以输出的也是p[2][2],当指针指向p[1]+6时,已经超出了数组的内存空间,应该是溢出了.
2005-11-18 09:59
nFox
Rank: 1
等 级:新手上路
威 望:1
帖 子:28
专家分:0
注 册:2005-11-16
收藏
得分:0 
  不懂~

天行健,君子以自强不息;地势坤,君子以厚德载物
2005-11-20 14:21
whq8073784
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2005-11-20
收藏
得分:0 

首先说#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就不太懂了

2005-11-20 14:59
ElfDN
Rank: 4
等 级:贵宾
威 望:11
帖 子:291
专家分:0
注 册:2005-11-13
收藏
得分:0 
+6是溢出的,所以每个得到的值可能不会一样,
后面那个60刚好指向是最后的那个,

2005-11-20 18:54
快速回复:[讨论][求助]又是招聘题,不买也要看一看啊
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.012817 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved