簡體   English   中英

將結構指針傳遞給C中的函數

[英]Passing a struct pointer to a function in C

我無法將結構傳遞給以結構指針作為參數的函數,並不斷收到錯誤“錯誤:一元'*'(具有'StackNode')的無效類型參數”

這是我的代碼的必要部分(不是全部):

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

struct stackNode{
    char data;
    struct stackNode *nextPtr;
};
typedef struct stackNode StackNode;
typedef StackNode *StackNodePtr;

void convertToPostfix(char infix[], char postfix[]);
int isOperator(char c);
int precedence(char operator1, char operator2);
void push(StackNodePtr *topPtr, char value);
char pop(StackNodePtr *topPtr);
char stackTop(StackNodePtr topPtr);
int isEmpty(StackNodePtr topPtr);
void printStack(StackNodePtr topPtr);

int main(){
    convertToPostfix(NULL, NULL);
    return 0;
}

void convertToPostfix(char infix[], char postfix[]){
    StackNode stack = {'(', NULL};
    push(*stack, 'a');
    printStack(&stack);
}

void push(StackNodePtr* topPtr, char value){
    topPtr->nextPtr = NULL; //just temporary, not needed
    topPtr->data = value; //just temporary, not needed
}

任何幫助將不勝感激,謝謝

更改push調用push(*stack, 'a')

push(&stack, 'a');
     ^

stack間接stack* )沒有意義,因為它不是指針。 取其地址( & )。

由於StackNodePtr已經是指向StackNode的指針,因此在參數列表中不需要更多的“ *”。

全部替換

void push(StackNodePtr* topPtr, char value){ // WRONG
                     ^^^

void push(StackNodePtr topPtr, char value){ // RIGHT
                     ^^^

我認為您的編譯器很聰明。 它知道空指針(NULL)與StackNodePtr是不同的東西。 您需要對調用進行強制類型轉換,或者對null的stacknode指針值進行定義。

NULLSNP=(StackNodePtr)NULL;

正如另一篇文章所述,推的調用也是錯誤的,應該是&而不是&。

push(&stack, 'a');

push和pop的定義是錯誤的,您給它一個stacknodeptr,但是希望有一個stacknodeptr指針。

void push(StackNodePtr topPtr, char value)
char pop(StackNodePtr topPtr);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM