免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 1899 | 回复: 14
打印 上一主题 下一主题

快来看这个小程序有什么区别? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-03-11 10:16 |只看该作者 |倒序浏览
第一种形式:
int main()
{
      int *ip_p;
      ip_p=new int;
      *ip_p=20;
      cout<<*ip_p;
      delete ip_p;
      return 0;
}

第二种情况:
int main()
{
      int *ip_p;
      *ip_p=20;
      cout<<*ip_p;
      return 0;
}
它们在运行上有什么区别?
------------------------------------

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
2 [报告]
发表于 2004-03-11 10:20 |只看该作者

快来看这个小程序有什么区别?

第二种,ip_p指向哪里?

论坛徽章:
0
3 [报告]
发表于 2004-03-11 10:23 |只看该作者

快来看这个小程序有什么区别?

区别有啊,下面的那个比上面的那个少了一行阿!
下面的那个你没new那还写delete干吗

论坛徽章:
0
4 [报告]
发表于 2004-03-11 10:38 |只看该作者

快来看这个小程序有什么区别?

对不起,是我写错了。第一种中用new 那么可以为它动态分配,但第二种定义后,也为它分配空间,但它们在分配空间上有什么先后吗?

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
5 [报告]
发表于 2004-03-11 10:42 |只看该作者

快来看这个小程序有什么区别?

[quote]原帖由 "zjwyp1980"]对不起,是我写错了。第一种中用new 那么可以为它动态分配,但第二种定义后,也为它分配空间,但它们在分配空间上有什么先后吗?[/quote 发表:

什么叫先后?
用new分配的在堆里,需要你自己释放。
按照你的意思,第二种是在栈里,出了它的作用域,
系统自动释放的。

论坛徽章:
0
6 [报告]
发表于 2004-03-11 11:13 |只看该作者

快来看这个小程序有什么区别?

要正确理解指针和指针指向的区别。一般我们在程序中定义的指针变量,它的存储空间是自动分配的,不需要关心它的值是多少;我们关心的是指针指向的对象。你这两个程序的区别就是:你在第一个程序中使指针指向了你动态分配的内存,但是在第二个程序中指针的指向是随机的(因为你没有初始化指针,即没有给指针变量赋初值),对这样的指针的使用会导致错误发生。

论坛徽章:
0
7 [报告]
发表于 2004-03-11 11:50 |只看该作者

快来看这个小程序有什么区别?

那一在我可以做如下的总结吗:
第一种和每二种变量都是在程序运行的时候来进行分配的,只不过第一种是在堆中分配,而第二种是在栈中进行分配。
而最大的区别就是:一个是自己管理,一个是程序自身管理。
这种情况如果改成以下方式时可能就更明显了:
int main()
{
int *ip_p;
ip_p=new int;
*ip_p=20;
cout<<*ip_p;
delete ip_p;
//在这时就把ip_p占用的资源释放调了,如果后面还有new形式的话,这时释放的资源都可以分给以后的变量所用
char  str_first[20]="text";
cout<<str_first;

return 0;
}

第二种情况:
int main()
{
int *ip_p;
*ip_p=20;
cout<<*ip_p;
char  str_first[20]="text";
cout<<str_first;
return 0; //在这里ip_p所占用的空间才被释放
}

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
8 [报告]
发表于 2004-03-11 11:54 |只看该作者

快来看这个小程序有什么区别?

你说得是对的。
不过你程序的错误你还没有改过来。

论坛徽章:
0
9 [报告]
发表于 2004-03-11 11:59 |只看该作者

快来看这个小程序有什么区别?

原帖由 "zjwyp1980" 发表:

int *ip_p;
*ip_p=20;}


这是错的.

ip_p 指向一个"随机"的地方.

论坛徽章:
0
10 [报告]
发表于 2004-03-11 12:01 |只看该作者

快来看这个小程序有什么区别?

您是说:int *ip_p;
这一句吗?
如果我起初没想用它,可以这样处理吗:int *ip_p=0
再用时可以写成:*ip_p=20
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP