【问题标题】:expected 'int *' but argument is of type 'int' in C预期为“int *”,但参数是 C 中的“int”类型
【发布时间】:2021-07-09 21:35:54
【问题描述】:

我有这样的代码,通过使用堆栈来反转单链表。但是当我调用 pushStack 函数时,会出现这样的错误; "预期为 'int *' 但参数是 'int' 类型"

{
    // store Node addresses in stack
    struct STACK *stk;
    struct Student* ptr = head;
    while (ptr != NULL) {
        pushStack(stk, ptr->studentnumber);
        ptr = ptr->next;
    }
 
    // print data from stack
    while (!emptyStack(stk)) {
        printf(stk->top);
        pop(); // pop after print
    }
}

这是我的 pushStack 函数;

bool pushStack (struct STACK* stack, int *dataInPtr)
{
//  Local Definitions 
    STACK_NODE* newPtr;

//  Statements 
    newPtr = (STACK_NODE* ) malloc(sizeof(STACK_NODE));
    if (!newPtr)
        return false;

    newPtr->dataPtr = dataInPtr; 

    newPtr->link    = stack->top; 
    stack->top      = newPtr; 

    (stack->count)++; 
    return true;
}   // pushStack 

我将 studentnumber 定义为结构中的整数。据我了解,我需要将列表转换为多链表,因此通过这种方式,我可以将 studentnumber 作为指针传递,但我希望它保留为单链表。我能做什么,如果有人有意见,我真的很感激。

【问题讨论】:

  • 至少printf(stk->top); 看起来肯定是错误的。
  • 使用bool pushStack (struct STACK* stack, int data)。我猜studentnumber,你作为第二个参数传递的类型是int,而不是int *。除此之外,您的方法效率很低。您需要做的就是从头开始处理列表,反转下一个指针(您总是需要记住一个指针),最后将头部指向前一个最后一个元素。
  • 当我将整数作为参数传递给 pushStack 函数时,我收到此错误“赋值使指针从整数而不进行强制转换”。因为我这样定义我的堆栈:typedef struct node2 { void* dataPtr; struct node2* link; } STACK_NODE; 我得到了一个错误newPtr->dataPtr = dataInPtr; 但是为了使用堆栈也存储字符串,我应该将 dataPtr 保留为 void 指针,对吗? @pqans
  • 我明白,但首先要保持简单。当这可行时,使您的列表通用。下次请提供完整的代码,包括数据类型定义。
  • 你的作业是否需要使用堆栈来解决这个问题?您应该能够在一次现场通行证中遍历列表并将其反转。请阅读How to Ask 并发布minimal reproducible example

标签: c pointers linked-list singly-linked-list doubly-linked-list


【解决方案1】:

嗯,您得到的错误是因为当您像这样调用pushStack 函数时:pushStack(stk, ptr->studentnumber),您指定的第二个参数是int,但您需要int *。所以它必须是这样的:pushStack(stk, &ptr->studentnumber)。这仅涉及您遇到的错误,我不确定您提供的代码是否符合预期。

【讨论】:

    猜你喜欢
    • 2021-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-16
    • 2017-06-14
    • 1970-01-01
    • 2019-05-12
    • 1970-01-01
    相关资源
    最近更新 更多