0

リンクリストを使用して新しいスタックを作成しています。TOPポインタが常にNULLを指している理由がわかりません。トップポインタを正しく設定していないか、関数の外に表示されていないと思います。

#include "stdio.h"
#include "stdlib.h"

typedef struct StackItem
{
      int itemValue;
      struct StackItem* NextItemPtr;
}StackItem;

typedef struct Stack
{
    struct StackItem *TOP;
}Stack;

int IsStackEmpty(StackItem *TOP)
{
     if(TOP==NULL)
         return 1;

}

void pushItem(StackItem *headPtr,int n)
{
    StackItem* Newnode;
    Newnode=(StackItem*)malloc(sizeof(StackItem));
    Newnode->itemValue=n;
    printf("Checking Head TOP %d\n\n",IsStackEmpty(headPtr)); //Everytime it is giving 1 
    Newnode->NextItemPtr=IsStackEmpty(headPtr)?NULL:headPtr;
    headPtr=Newnode;
}


int main()
{
   Stack* stackptr;
   stackptr=(Stack*)malloc(sizeof(Stack));
   stackptr->TOP=NULL;
   pushItem(stackptr->TOP,3);
   pushItem(stackptr->TOP,6);
   return 0;

}
4

2 に答える 2

3

このステートメントは、呼び出し元には何もしません。

headPtr=Newnode;

あなたはできる:

  • ダブルポインタを渡し、に割り当てます*headPtr
  • Newnodeに割り当てる代わりに戻るheadPtr

このCFAQは、まさにこの主題を説明しています。

于 2013-02-21T17:15:12.410 に答える
1
headPtr = Newnode;

は関数の引数であるためheadPtr、値で渡されます。関数内で変更しても、呼び出し元には影響しません。あなたはそれにポインタを渡し、ポインタを通してそれを変更する必要があります:

void pushItem(StackItem **headPtr, int n)
*headPtr = NewNode;
于 2013-02-21T17:16:39.690 に答える