结构体的指针??
#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




