将结构指针传递给C中的函数

时间:2012-05-12 07:14:17

标签: c function structure

我无法将结构传递给一个以结构指针作为参数的函数,并且不断收到错误“错误:一元的无效类型参数'*'(有'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
}

任何帮助将不胜感激,谢谢

3 个答案:

答案 0 :(得分:10)

更改push来电,push(*stack, 'a')

push(&stack, 'a');
     ^

stack*)上的间接是没有意义的,因为它不是指针。取其地址(&)确实。

答案 1 :(得分:4)

由于StackNodePtr已经是StackNode的指针,因此参数列表中不需要更多的'*'。

全部替换

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

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

答案 2 :(得分:0)

我认为你的编译器很聪明。它知道void指针(NULL)与StackNodePtr不同。您需要对调用进行强制转换或者使用null stacknode指针值定义。

NULLSNP=(StackNodePtr)NULL;

正如另一篇帖子所说,推送的呼吁也是错误的,它应该是&amp;不是&amp;。

push(&stack, 'a');

push和pop的定义是错误的,你给它一个stacknodeptr但是期望一个stacknodeptr指针。

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