C 如何修复“格式%d需要int类型的参数”的警告

C 如何修复“格式%d需要int类型的参数”的警告,c,C,此警告在调试代码时出现,但作为一种功能它可以工作 格式“%d”要求参数类型为“int*”,但参数2的类型为“int” #include <stdio.h> #include <stdlib.h> typedef void * StackEntry; #define MAXENTRY 100 typedef struct stackentry { int top; StackEntry entry[MAXENTRY]; } Stack; void Cr

此警告在调试代码时出现,但作为一种功能它可以工作

格式“%d”要求参数类型为“int*”,但参数2的类型为“int”

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

typedef void * StackEntry;
#define MAXENTRY 100

typedef struct stackentry
{
    int top;
    StackEntry entry[MAXENTRY];
} Stack;

void CreateStack(Stack *);
void Push(StackEntry, Stack *);
void Push(StackEntry, Stack *ps);
void Pop(StackEntry *, Stack *ps);
int StackEmpty(Stack *);
int StackFull(Stack *);

int main()
{
    int a, b;
    StackEntry e = (int *)22;
    Stack s;
    CreateStack(&s);
    Push(e, &s);
    //Push (22,&s);
    //Pop(&e,&s);
    a = StackEmpty(&s);
    b = StackFull(&s);
    printf("%d %d %d", b, a, s.entry[0]);
    return 0;
}
您已将Point.x声明为int*类型,即指向int的指针,但您为其分配了int并将其打印为int

将类型更改为int

若你们的意思是点由一个整数值x组成,那个么点应该声明如下

struct Point { int x; };
p1.x = 2;
在声明中,x不是整数,而是指向整数的指针

然后,可以将值2指定给x,如下所示

struct Point { int x; };
p1.x = 2;

printf语句也可以工作。

我不理解错误消息:%d需要int类型的参数。您是否复制/粘贴了错误消息或从内存中键入了错误消息?继续讨论您发布其他代码的答案,但这并不是真正的问题,将整数存储到void中并不是一个非常好的做法。如果您想继续这样做,修复错误的方法就是使用printf%d,intp1.x。或者,也许更好的方法是每次在堆栈上推一个int时调用mallocsizeof int,但是您还需要做一些其他相应的更改。Steve非常感谢它现在可以工作了:但是指针指向整数之前的int是什么意思,它和强制转换int*之间的区别是什么?如前所述,堆栈是指向int或int*的指针数组。语法int*是将某些内容转换为该类型的强制转换。您试图将int类型的值塞入设计用于保存int*类型值的插槽,这是相当错误的。编译器不喜欢这样,并且抱怨,这就是为什么您必须使用显式cast来表示“是”,我真的打算做这个错误的事情,所以请接受我的int并假装它是int*。然后,当你把int*从数组中取出来时,你必须把它转换回int-这就是int cast的作用。看,这是另一个程序的一部分,但我试图用一个单独的方法来简化它code@belal哈桑-祝你好运!请不要用逗号写代码。而是将代码作为问题的一部分发布