0

这里有什么问题?它打印第一个 printf 但它不打印下一条语句 帮助赞赏。

代码:

#include<stdio.h> 
#include<stdlib.h>

struct node
{
  int Data;
  struct node *Link;
};

//close struct
void insertAtEnd(struct node *Itcstd, int iData)
{
  while (Itcstd->Link != NULL )
    Itcstd = Itcstd->Link;

  Itcstd->Link = (struct node*) malloc(sizeof(struct node));
  Itcstd->Link->Link = NULL;
  Itcstd->Link->Data = iData;
} //close insertAtEnd

int main()
{
  struct node *EHead;

  EHead = (struct node*) malloc(sizeof(struct node));
  EHead->Link = NULL;
  EHead->Data = 4;

  printf("EHead link: %p Ehead Data: %d\n", EHead->Link, EHead->Data);
  insertAtEnd(EHead, 10);
  printf("EHead link: %p Ehead Data: %d\n", EHead->Link, EHead->Data);

  return 0;
} //close main
4

3 回答 3

2

实际上这是一个很好的代码,它非常适合我。(我可以看到两条线。)

于 2013-11-14T09:19:00.687 回答
1

代码运行良好,没有任何内存问题。

唯一需要提及的是,printf()指针 ( %p) 的转换说明符仅定义为 for void *。告诉编译器是迂腐-pedantic的(gcc 的选项),它会通知你这一点。

所以这

printf("EHead link: %p Ehead Data: %d\n", EHead->Link, EHead->Data);

应该是这个

printf("EHead link: %p Ehead Data: %d\n", (void *) EHead->Link, EHead->Data);

顺便说一句,这是 C 中无法避免强制转换的罕见情况之一。

于 2013-11-14T09:35:00.910 回答
1

代码很优雅,对我来说工作正常我在 Windows(代码块 MinGW gcc 4.7,turbo c++)linux(gcc 4.8.1)上检查了它,它工作得很好。您使用的是哪个环境?

于 2013-11-15T13:38:00.353 回答