| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 322 人关注过本帖
标题:关于数据结构分配地址的问题
只看楼主 加入收藏
jyckder
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2010-9-16
结帖率:66.67%
收藏
已结贴  问题点数:1 回复次数:1 
关于数据结构分配地址的问题
typedef struct {
    linklist *head,*tail;
    int length;
}sqlist;
int initlist(sqlist &l){
    if(!(l.head=(linklist*)malloc(sizeof(linklist))))exit(OVERFLOW);
    l.head->next=NULL;
    l.tail=l.head;
    l.length=0;
    return ok;
}还有其他的代码我没写出 因为跟这个问题不一样  
在initlist(sqlist l)中l就已经给定义了 这样系统应该给他分配一个空间了吧  但是为什么这个时候还要再给l.head再分配空间呢  l.head在l被定义时已经分配了一个空间了吗  而这里的l.head=(linklist*)malloc(sizeof(linklist)给它分配空间到底有什么作用呢   高手解答
搜索更多相关主题的帖子: 数据结构 地址 
2010-11-21 19:47
玩出来的代码
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:河南新乡
等 级:贵宾
威 望:11
帖 子:742
专家分:2989
注 册:2009-10-12
收藏
得分:1 
int *p;
p是个指针现在他可以指向任意的地址,若对指针解引用*p这样使用是不安全的,因此要正确使用就的让p指向一个合法的空间,
int i;
p=&i;现在p指向了变量i的地址,是一个合法的地址了,现在可以安全的使用p对他解引用。
要分清楚两个概念,指针本身的地址与指针所指向的地址。在定义指针p时是为存储变量p分配了空间,p的指向是不确定的。
sqlist应该是你定义的一个结构来存储链表的信息,现在的问题是你在initlist(sqlist &l)中处理的,这时你的链表应该还没建立,所以需要将l初始化为空,因此你可以l.head=l.tail=NULL;l.length=0;来初始化而不用分配内存。在建立链表后为了让head能够指向链表首地址就只需,l.head=head;此时l.head与head是指向同一地址的两个指针。

不过从你给出的信息看,你是想再多一个头结点来指向链表的第一个有用的节点,因此需要l.head->next=head;此时l.head必须有一个合法的空间才能使用。记住linklist *head,只是给指针变量head分配了存储空间,任何指针所占的大小都为4,所以现在只为存储head分配了4字节的空间,而他的指向是不确定的,也就是不合法的。需分配空间后方可使用。

离恨恰如春草,更行更远还生。
2010-11-21 21:33
快速回复:关于数据结构分配地址的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.022712 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved