CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C++ 语言

结构体的指针??

楼主corrupt(喜欢 睡在床板下 的思考)2005-01-23 02:01:28 在 C/C++ / C++ 语言 提问

#include<iostream>  
  using   namespace   std;  
  struct   treenode  
  {  
  int   data;  
  int   year;  
  };  
  int   main()  
  {  
  treenode   *p=NULL;  
  p->data=8;  
  p->year=9;  
  cout<<*(p->data)<<endl;  
                    cout<<p->data<<endl;  
  return   0;  
  }  
  有错吗??     我找了半天   找不出错在哪????? 问题点数:20、回复次数:11Top

1 楼corrupt(喜欢 睡在床板下 的思考)回复于 2005-01-23 02:06:30 得分 0

刚刚发错,这个才是~~~~~~~~~~~~~~~~~~~~  
  ****************************************************************  
  #include<iostream>  
  using   namespace   std;  
  struct   treenode  
  {  
  int   data;  
  int   year;  
  };  
  int   main()  
  {  
  treenode   *p=NULL;  
  p->data=8;  
  p->year=9;  
  cout<<*(p->data)<<endl;  
                    cout<<p->data<<endl;  
  return   0;  
  }  
  有错吗??     我找了半天   找不出错在哪?????Top

2 楼corrupt(喜欢 睡在床板下 的思考)回复于 2005-01-23 02:08:11 得分 0

不好意思~~~     刚刚操作失误,     (   我又搞错了)      
  应该   是下面这个~~~~~~~~~   实在     是不好意思~~~~(sorry,sorry)  
  ******************************************************8  
  #include<iostream>  
  using   namespace   std;  
  struct   treenode  
  {  
  int   data;  
  int   year;  
  };  
  int   main()  
  {  
  treenode   *p=NULL;  
  p->data=8;  
  p->year=9;  
  cout<<p->data<<endl;  
                    cout<<p->data<<endl;  
  return   0;  
  }  
  有错吗??     我找了半天   找不出错在哪?????Top

3 楼look01(^-^)回复于 2005-01-23 02:21:50 得分 0

错误太明显了p=null????  
  改:  
  treenode   *p=   new   treenode;  
  p->data=8;  
  p->year=9;  
  cout<<p->data<<endl;  
                    cout<<p->data<<endl;  
  free   p;  
  return   0;Top

4 楼ssdx(未来啊未来)回复于 2005-01-23 03:03:30 得分 0

treenode   *p   =   NULL  
  It   declares   a   point   pointed   to   NULL!!!  
  p   doesn't   point   to   a   structure   object!!!  
   
  Top

5 楼CMyMfc(星际人生:=E.F=FlyForEver)回复于 2005-01-23 09:09:34 得分 0

int   main()  
  {  
  treenode   *p   =   new   treenode;  
  p->data   =   8;  
  p->year   =   9;  
  cout<<p->data<<endl;  
                    cout<<p->data<<endl;  
                    delete   p;  
  return   0;  
  }  
   
  或  
  int   main()  
  {  
                    treenode   node;  
  treenode   *p   =   &node;  
  p->data   =   8;  
  p->year   =   9;  
  cout<<p->data<<endl;  
                    cout<<p->data<<endl;  
  return   0;  
  }  
  Top

6 楼CMyMfc(星际人生:=E.F=FlyForEver)回复于 2005-01-23 09:10:00 得分 0

new   的东西要delete,   不要freeTop

7 楼ggslayer(赤雪)回复于 2005-01-23 09:12:15 得分 5

用new分配完了的空间     那个指针P所指向的内容是否被初始化值啊?  
  感觉treenode   *p=NULL;   不是建立一个treenode类型的指针指向空地址吗?     感觉没什么错啊    
  哪位大虾给讲讲道理     谢谢了Top

8 楼CMyMfc(星际人生:=E.F=FlyForEver)回复于 2005-01-23 09:18:46 得分 5

new   分配完空间会调用它的构造函数  
   
  treenode   *p   =   NULL;   //   定义一个指针,   并且什么都没有指向  
   
  p->data   等同于(*p).data  
   
  *p用来取p指向的内存的值,   如果p是空的,   那*p能取到吗???  
   
  取不到就出错咯Top

9 楼snow810211(阳光)回复于 2005-01-23 09:23:23 得分 5

用new分配完了的空间     那个指针P所指向的内容是否被初始化值啊?  
  ----  
  用new分配完的空间,应该可以被初始化,前提是struct中有构造函数。。。。  
   
  感觉treenode   *p=NULL;   不是建立一个treenode类型的指针指向空地址吗?     感觉没什么错啊    
  哪位大虾给讲讲道理  
   
  -----  
  是建立了一个指针,并且初始化为NULL,但是并没有分配空间呢。。。所以必须要new一下。  
   
  int   main()  
  {  
  treenode   *p   =   new   treenode;  
  p->data   =   8;  
  p->year   =   9;  
  cout<<p->data<<endl;  
                    cout<<p->data<<endl;  
                    delete   p;  
  return   0;  
  }  
   
   
  Top

10 楼useresu(俗人)(灌水是我无言的抗议)回复于 2005-01-23 09:34:11 得分 5

new分配完了空间,并不初始化的,初始化应放在Struct的构造函数,如果是调用默认构造函数,则编译器会按位赋零值吧(或者是按对应的类型赋相应的零)记不很清楚了,再去帮你查查,  
   
  还有空的指针是不能进行任何赋值操作的。  
  treenode   *p=NULL//仅仅是一个指针的定义,并没有分配空间,  
  试问建立一个指向空地址的指针有什么意义啊。  
  当然你也可以这样。  
  treenode   node;  
  treenode   *p   =   NULL;//这句并没有错,关键在这个指针重新赋值之前,是不能对其操作的。这句相当与一个空操作,因为紧接着对它赋值,所以初始化为空没什么意义。  
  treenode   *p   =   &node;//这样之后就没有问题了。  
   
  也可以  
  treenode   *p   =   NULL;//这句并没有错,关键在这个指针重新赋值之前,是不能对其操作的。  
  treenode   *p   =   new   treenode;//这样之后就没有问题了。  
   
  如果指针仅仅是个声明,而不马上赋值的话,初始化这个指针为空是好的风格,而且几乎一定要这么做,  
  比如:  
  Class   treenode  
  {  
        int   *   p;  
        treenode();    
  }  
  treenode::treenode():p(NULL)  
  {  
           
  }  
  不知我说明白了没有。  
   
   
  Top

11 楼corrupt(喜欢 睡在床板下 的思考)回复于 2005-01-23 11:15:14 得分 0

呵呵,   是啊~~   大家   说的没错~  
    原来   我是忘了   delete;  
    看来   给我提了   一个醒,   new   之后   是一定要   delete   的,    
  不然   编译   没错,   但是   执行不了~~Top

相关问题

  • 结构体指针
  • 指针和结构体
  • 如何delete结构体指针?
  • 结构体指针的问题
  • 结构体指针的对位
  • 结构体套结构体指针,用memcpy
  • 结构指针的指针的问题?
  • 关于结构体的指针在开线程时的问题!!
  • 请问结构体指针如何判断和赋值
  • 请问结构体指针如何判断和赋值

关键词

  • 指针
  • null
  • treenode
  • 初始化
  • year
  • 指向
  • 分配
  • cout
  • 空间
  • data

得分解答快速导航

  • 帖主:corrupt
  • ggslayer
  • CMyMfc
  • snow810211
  • useresu

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo