Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 预期标识符在<;(>;令牌_C - Fatal编程技术网

C 预期标识符在<;(>;令牌

C 预期标识符在<;(>;令牌,c,C,这个代码怎么了 #include "stdio.h" typedef int type1[10]; typedef type1 *type2; typedef struct { int field1; type2 field2; } type3; typedef type3 type4[5]; int main() { type4 a; a[0].(*field2[3]) = 99; // Line 16 return 0; } 获取:mai

这个代码怎么了

#include "stdio.h"

typedef int type1[10];

typedef type1 *type2;

typedef struct {
    int field1;
   type2 field2;
} type3;

typedef type3 type4[5];

int main() {    
   type4 a;
   a[0].(*field2[3]) = 99;  // Line 16
   return 0;
}
获取:main.c:16:10:错误:令牌前应包含标识符


Gcc版本:Gcc(Gcc)4.7.2

编译器错误准确地告诉您发生了什么问题:

令牌前的预期标识符


您只能使用结构成员的名称(这是一个标识符)来访问结构成员,而不能使用任意表达式。

如果这确实是从一本书中获取的,则这是一个拼写错误。分配int的一些正确表达式包括

*a[0].field2[3] = 99;
*(a[0].field2)[3] = 99;
*(a[0].field2[3]) = 99;
一个工作计划将是

#include <stdlib.h>

typedef int type1[10];

typedef type1 *type2;

typedef struct {
   int field1;
   type2 field2;
} type3;

typedef type3 type4[5];

int main(void) {
   type4 a;

   a[0].field1 = 99;
   a[0].field2 = malloc (sizeof(type1));
   (*a[0].field2)[3] = 99;

   return 0;
}
#包括
typedef int type1[10];
类型定义类型1*2;
类型定义结构{
int field1;
类型2字段2;
}类型3;
typedef type3 type4[5];
内部主(空){
4a型;
a[0]。字段1=99;
a[0].field2=malloc(sizeof(type1));
(*a[0].field2[3]=99;
返回0;
}
注意
的用法,因为我们使用
malloc

检查

p、 18,l.-7正确的表达式是(*a[0]。字段2)[3]=99;

Andrew Li 2010年12月31日

我不确定这是否是一个好的或坏的迹象,一本20多年前首次出版的书有十几个错误(一些重大的错误!),只有在去年才发现


这本书可能很旧,但杰夫·厄尔曼(Jeff Ullman)很受尊敬。我记得几十年前他写的编译器设计书在我脑海中挥之不去……

首先,它应该是
#include
。带双引号的include用于与源文件位于同一目录中的头文件。道格拉斯B.斯派克,谢谢你的解释!代码有什么问题吗?分开从语法错误来看,它充满了选择不当的名称。例如,指针的typedef通常是一个坏主意,而且名称
type1
type2
type3
、和
type4
都很糟糕。@DouglasB.stype为什么?没有使用stdio函数…:-)@Jens-yes,这很有趣——我甚至没有注意到他根本不需要stdio。这个例子取自《计算机科学基础》第16、18页。我认为这是对的,但现在我感到困惑。@user2244092:那本书中的代码是指C,还是其他类似C的语言?经过一些实验,我仍然不知道如何访问该结构。你能解释一下正确的方法吗?@user2244092
(*a[0].field2)[3]=99在编写上一条评论时未看到答案。我试了第二个。编译没问题。虽然程序在运行时正在下降。我认为书中的示例有问题。只要field2(指向int数组的指针)不指向任何地方,程序就会崩溃。首先需要分配内存;a[0]。字段2=&b;是的,这是使field2指针指向足够内存的另一种方法。