说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

请教关于指针问题。

编辑:说三道四文库 发布时间:2018-05-21 03:18
HTML文档下载 WORD文档下载 PDF文档下载
我定义了两个结构体如下:
struct wordtype
{
  CString word;
  CString meaning;
};
 struct wordinfile
{
  struct wordtype wordinfo;
  struct wordinfile * next;
}*p1,p2;

当我如此赋值时会出错:
p1->wordinfo.word="string";
而如此赋值时不会出错:
p2.wordinfo.word="string";
是在运行时出错,不是在编译时。
请教为什么?
p1应该p1=new wordinfile一下吧
谢谢,可以了!
请问new wordinfile是起什么作用?
不好意思,我刚学。
p1是一个指针,在声明的时候并没有分配空间,因此在使用时必须为它分配空间,new就是这个作用,建议先学习c++  =)
别忘了delete
在你的代码中,p1声明为wordinfile型指针,p2声明为wordinfile型变量,指针型变量在用new分配内存空间之前是不能用他来访问内存的,因为那时他所指内存地址是未知的。在p1=new wordinfile之后,就可以了,此时,系统已经为p1保留了一块内存。要注意的是在用完该块内存之后,最好用delete p1释放他。对于p2,因为在声明时就具有了他的内存空间,因此是可访问的。
原来你是一头蠢驴
我用malloc分配为什么不行呀?
cnenyinet先生,我是比较蠢,但我不是驴。
在你侮辱别人人格的时候,也侮辱了你自己。
我请你注意礼貌。
还有,我相信我很快就会赶上你的。
to newhua():
1.对于p1,它是一个指针,需要为它申请空间后,才能对它的成员赋值,并且用过后,应delete
如:p1=new wordinfile;
...delelte p1;
malloc分配也是可以得,但释放时要用free();

2.p2是一个结构变量,定义它的时候就已经为它分配了空间。

3.无聊的人不要去理。。。
to newhua:
我支持你
要分配内存有很多方法!
分配 与 回收
new     delete
malloc  free
GlobalAlloc GlobalFree
LocalAlloc LocalFree
....
MSCN 上有!
你可以用下面的方法:
p1=(wordinfile*)(new BYTE[sizeof(wordinfile)]);
我也插一句:Malloc的方法是不是这样啊?你试一试。

p1=(wordinfile*)malloc(sizeof(wordinfile));
好象是的,用malloc时要强行改变指针类型的。
楼上说的正确
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘