指向结构的指针作为形参时候的问题

lightyacht 2008-08-29 02:04:54
我写一个链表插入函数,

typedef struct ELemtype
{
char name[20];
short num;
int id;
} Elemtype;
typedef struct LNode
{
Elemtype data;
struct LNode *next;
} Lnode;
#define ELEMSIZE sizeof(Elemtype)
#define NODESIZE sizeof(Lnode)
#define LINKSIZE 100


void InsertLink(Lnode **Link, Elemtype *elem)
{
Lnode *node=*Link;
//Lnode *head=NULL;
if(!node) //If it is an empty link, set elem as the head
{
node=(Lnode *)malloc(NODESIZE);
node->next=NULL;
memcpy(&(node->data),elem,ELEMSIZE);
*Link=node;
}
else
{
while(node)
{
node=node->next;
}
node=(Lnode *)malloc(NODESIZE);
node->next=NULL;
memcpy(&(node->data),elem,ELEMSIZE);
}
// *Link=node;
}

红色部分是不是不对呀,程序总是有问题
...全文
102 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
_石头_ 2008-08-29
  • 打赏
  • 举报
回复
另外,结构体示可以整体赋值的,而且效率很高,不知道你们怎么都喜欢用memcpy()来拷贝,这样的效率明显低些!
_石头_ 2008-08-29
  • 打赏
  • 举报
回复

void InsertLink(Lnode **Link, Elemtype *elem)
{
Lnode *temp, *node=*Link;
if(!node) //If it is an empty link, set elem as the head
{
node=(Lnode *)malloc(NODESIZE);
node->next=NULL;
memcpy(&(node->data),elem,ELEMSIZE);
*Link=node;
}
else
{
while(node)
{
temp=node; //保存node不为空时的值,避免连接中断;
node=node->next;
}
node=(Lnode *)malloc(NODESIZE);
temp->next=node; //把环连上
node->next=NULL;
memcpy(&(node->data),elem,ELEMSIZE);
}
// *Link=node;
}

e_sharp 2008-08-29
  • 打赏
  • 举报
回复
lz红色部分没问题,就是link中没有挂上
e_sharp 2008-08-29
  • 打赏
  • 举报
回复
void InsertLink(Lnode **Link, Elemtype *elem) 
{
Lnode *node=*Link;
//Lnode *head=NULL;
if(!node) //If it is an empty link, set elem as the head
{
node=(Lnode *)malloc(NODESIZE);
node->next=NULL;
memcpy(&(node->data),elem,ELEMSIZE);
*Link=node;
}
else
{
while(node->next)
{
node=node->next;
}

Lnode* p = (Lnode *)malloc(NODESIZE);
p->next = NULL;
memcpy(&(p->data),elem,ELEMSIZE);

node->next = p;
}
}
太乙 2008-08-29
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 pzhfei 的回复:]
是什么问题呢?
[/Quote]

得让lz单步跟踪一下才知道!
缘来是梦 2008-08-29
  • 打赏
  • 举报
回复
是什么问题呢?
太乙 2008-08-29
  • 打赏
  • 举报
回复
lz 红色部分应该没错!
太乙 2008-08-29
  • 打赏
  • 举报
回复
我上面是测试,通过!
太乙 2008-08-29
  • 打赏
  • 举报
回复


#include <iostream>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
typedef struct ELemtype
{
short num;
int id;
} Elemtype;
typedef struct LNode
{
Elemtype data;
struct LNode *next;
} Lnode;
#define ELEMSIZE sizeof(Elemtype)
#define NODESIZE sizeof(Lnode)
#define LINKSIZE 100
void main()
{
Lnode *node=(Lnode *)malloc(NODESIZE);
node->data.num=10;
node->data.id=100;
node->next=NULL;
Elemtype *elem = (Elemtype*) malloc(ELEMSIZE);

memcpy(elem,&(node->data),ELEMSIZE);

cout<<elem->num<<endl;
delete node;
delete elem;

}

_石头_ 2008-08-29
  • 打赏
  • 举报
回复
memcpy(&(node->data),elem,ELEMSIZE);
改为:
node->data = *elem;
下面的相同
_石头_ 2008-08-29
  • 打赏
  • 举报
回复
晕!我看错了!
_石头_ 2008-08-29
  • 打赏
  • 举报
回复
不是红色的不对,问题在这里:

while(node)
{
node=node->next;
}
node=(Lnode *)malloc(NODESIZE);
node->next=NULL;

69,368

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧