将结构传递给函数的问题

时间:2013-10-21 05:53:55

标签: c pointers stack push structure

我有几年的java经验,但我对C很新。我还在努力弄清楚何时何时不使用指针。我得到了这个基本代码,需要完成'push'方法,以便将下一个元素推送到堆栈上,但我收到的错误是:

请求成员'top'在非结构的东西。

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

int exit_status = EXIT_SUCCESS;
#define EMPTY (-1)
#define SIZE 16

typedef struct stack stack;
   struct stack {
   int top;
   double numbers[SIZE];
};

void push (stack *the_stack, double number) {
    if(&&the_stack.top>=SIZE-1){
       printf("error");
    }else{
       the_stack.numbers[&&the_stack.top++ ] = number;
    }
}
int main (int argc, char **argv) {
  if (argc != 1) {
     fprintf (stderr, "Usage: %s\n", basename (argv[0]));
     fflush (NULL);
     exit (EXIT_FAILURE);
  }
stack the_stack;
the_stack.top = EMPTY;
char buffer[1024];
for (;;) {
   int scanrc = scanf ("%1023s", buffer);
   if (scanrc == EOF) break;
   assert (scanrc == 1);
   if (buffer[0] == '#') {
     scanrc = scanf ("%1023[^\n]", buffer);
     continue;
  }
  char *endptr;
  double number = strtod (buffer, &endptr);
  if (*endptr == '\0') {
     push (&the_stack, number);
  }else if (buffer[1] != '\0') {
     bad_operator (buffer);
  }else {
     do_operator (&the_stack, buffer);
  }
}
 return exit_status;
}

我忽略了一些非常基本的东西吗?

2 个答案:

答案 0 :(得分:1)

访问结构的成员时,有两个运算符:用于非指针结构的点运算符.和用于指向结构的指针的“箭头”运算符->

您有一个指向push函数中结构的指针,因此您需要使用“箭头”运算符。


您的代码还有其他问题,例如push函数中的双符号。退出程序时,您也不需要刷新任何文件,运行时也会为您执行此操作。

答案 1 :(得分:0)

It seems very clearly that you have less experience in C. There are lots of compile time errors in your code like for example : 

在推送功能top中,数字应调用为: the_stack-&GT;顶 the_stack-&GT;数字[]
箭头用于调用指针变量的成员。

现在与Java比较: Java仅使用引用而不是指针。但在内部他们指向内存中的某个位置。

https://www.dropbox.com/s/qfk86yb3drdlmz2/C%20to%20Java.JPG图片 http://erikdemaine.org/papers/CPE98/paper.pdf论文

检查此链接以关联C代码和Java代码。