You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言结构体访问报错:expected identifier before '(' token 求解

解决C语言链表/图代码中PrintList函数的编译错误

嘿,我一眼就看出你这条fprintf语句里的语法问题了,这正是编译器报"Error: expected identifier before '(' token"的原因。

错误根源拆解

在C语言里,->运算符的右侧必须是结构体/联合体的成员名称(合法标识符),而你写的aux->((int*)this[0])里,->后面跟着的是一个带强制转换的表达式,编译器找不到它期待的成员标识符,自然就抛出错误了。

推测你的意图与修正方案

从代码片段来看,你应该是想通过aux指针访问结构体里的两个int类型成员,而this数组的用途大概率是存储成员的字节偏移量,或是你错误地用数组元素代替了成员名。下面分两种常见场景给出修正:

场景1:this存储结构体成员的字节偏移量

如果this[0]和this[1]是你用offsetof宏获取的成员偏移值,那正确的访问方式需要通过字节偏移计算成员地址,再取值:

// 先假设你的链表节点结构体定义如下
typedef struct Node {
    int id;
    int value;
    struct Node* next; // 链表节点必备指针
    // 图结构相关的其他成员(比如邻接表指针等)
} Node;

void PrintList(FILE* output, Node* aux, size_t member_offsets[2]) {
    // 转成char*是因为偏移量以字节为单位,计算后再转成int*取值
    int target_id = *(int*)((char*)aux + member_offsets[0]);
    int target_val = *(int*)((char*)aux + member_offsets[1]);
    fprintf(output, "%d:%d\n", target_id, target_val);
}

场景2:直接访问结构体固定成员

如果this数组是多余的写法,你本来就是想访问结构体的固定成员(比如id和value),那直接用标准的成员访问语法即可:

typedef struct Node {
    int id;
    int value;
    struct Node* next;
    // 图结构相关成员
} Node;

void PrintList(FILE* output, Node* aux) {
    // 直接用->访问结构体成员,这是C语言的标准写法
    fprintf(output, "%d:%d\n", aux->id, aux->value);
}

验证修正

把对应场景的代码替换你原来的错误语句,再编译应该就能顺利通过了。如果你的实际场景和这两种都不一样,可以补充结构体的完整定义和this数组的具体用途,我再帮你细化调整~

内容的提问来源于stack exchange,提问作者Granger Obliviate

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 04:23:24