一个简单问题,不理解

wylove 2004-11-02 01:28:34
这是C++ primer中的一个问题,本人刚学C++,实在不理解,希望各位大虾给予帮助!

下面的代码段是做什么的,有什么严重错误(注意指针pia 的下标操作符的用法是正确的在3.9.2 节中我们会解释其理由)
int *pi = new int( 10 );
int *pia = new int[ 10 ];
while ( *pi < 10 ) {
pia[ *pi ] = *pi;
*pi = *pi + 1;
}
delete pi;
delete [] pia;
...全文
77 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
wylove 2004-11-02
  • 打赏
  • 举报
回复
这是C++ primer中的问题,我自己看不出有什么错误!谢谢各位了!
dragonzxh 2004-11-02
  • 打赏
  • 举报
回复
如果按照*pi=10,Pia[10]哪来啊,没有的啊
zxl_llx 2004-11-02
  • 打赏
  • 举报
回复

我的解释
int *pi = new int( 10 );//<-----------为pi开辟空间,并负值10,即*pi=10;
int *pia = new int[ 10 ];//<-----------pia开辟空间
while ( *pi < 10 ) {//<------------派断是否*pi<10
pia[ *pi ] = *pi;//<--------------负值
*pi = *pi + 1;//<--------------自增;
}
delete pi;
delete [] pia;//<----------------删除指针

其实,while没循环,把int *pi = new int( 10 );改成int *pi = new int( 0 );好点
dragonzxh 2004-11-02
  • 打赏
  • 举报
回复
程序改为这样

int *pi = new int( 10 );
int *pia = new int[ 10 ];
while ( *pi >= 10&&*pi<=20 )
{
pia[ *pi-10 ] = *pi;
*pi = *pi + 1;
}
delete pi;
delete [] pia;
dragonzxh 2004-11-02
  • 打赏
  • 举报
回复
再者,pia[]没new 那么多啊
imRainman 2004-11-02
  • 打赏
  • 举报
回复
*pi的初值一开始就为10了,见:int *pi = new int(10) ;

那么while还没循环就退出了~
dragonzxh 2004-11-02
  • 打赏
  • 举报
回复
没啥严重的,呵呵,首先就是循环条件永远为假,呵呵
sutra 2004-11-02
  • 打赏
  • 举报
回复
int *pi = new int( 10 );//申请一个int,初使化为10
int *pia = new int[ 10 ];//申请10个int
while ( *pi < 10 ) {//当先申请的那个int值小于10时循环
pia[ *pi ] = *pi;//以先申请的那个int的值为下标,对指定int数组元素赋值。
*pi = *pi + 1;//先申请的数自增1。
}
delete pi;
delete [] pia;

小弟无能,实在没看出哪不对。当然,要严格地讲,new可以返回NULL,因此应该检查new的返回值。
另外,在这里,首次循环条件就是FALSE,好像不大合理。

65,184

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧