0

嗨,我或多或少是 c 新手,当我学习如何使用结构和联合时,我收到了这个错误:“';'之前的预期表达式” 令牌”我一直在寻找错误很长时间,但我找不到它。我所要求的只是以下代码中需要的更正。

我在 mac os x 上使用 Gnu C 编译器

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

struct lista;
struct elemento;
union member{
  int i;
  struct lista * n;};

struct elemento{
  union member * v;
  struct elemento * n;};

struct lista{
  int len;
  struct elemento * n;};

void append(struct lista* a , union member * e);

int main(void){
  return 0;}

void append(struct lista * a , union member * e){
  struct elemento ** j= ((*a).n)*;                    /* error here */
  int c;
  for(c=0;c<(*a).len;c++){
    j=((**j).n)* ;}                                   /* error here */
  (*a).len++;
  *j=(struct elemento *)malloc(sizeof(struct elemento));
  (**j).v=e;}

它在第 24 行和第 28 行代码中引发了两个错误,请帮助我

4

4 回答 4

5
struct elemento ** j= ((*a).n)*;   // 24th line

尝试这个 -

struct elemento ** j= & ((*a).n); // Note the removal of * and adding & symbol before.

由于j是指向指针的指针,因此需要添加&符号。

于 2012-08-01T17:09:07.210 回答
0

分号前面的那颗星是错误的。不确定您认为有什么好处,但您必须将其删除。

于 2012-08-01T17:10:46.383 回答
0

你这里有问题

 for(c=0;c<(*a).len;c++) {
     j=((**j).n)* ;}
                ^
                ^

删除那个*

于 2012-08-01T17:10:49.577 回答
0
void append(struct lista * a , union member * e){
  struct elemento ** j= ((*a).n)*;

在分号之前有一个悬空的星号。需要删除它:

void append(struct lista * a , union member * e){
  struct elemento ** j= ((*a).n);

这个问题的另一个发生是在 for 循环中(感谢 Dennis Meng)。


题外话:你不需要分号后#include

#include <stdio.h>
#include <stdlib.h>
于 2012-08-01T17:08:29.317 回答