C语言中的嵌套结构访问

时间:2013-10-27 19:51:14

标签: c compiler-errors

以下是示例代码的片段:

typedef struct Test{
    int a;
    struct Test *T;
}T1;
typedef struct Test_2{
    T1 *tests;
}T2;
T2 *t2;
T1 *t1;

int main(){
    t2=(T2*)malloc(sizeof(T2));
    t1=(T1*)malloc(sizeof(T1)*4);
    t2->tests=(T1*)malloc(sizeof(T1)*4);
    t2->(tests+2)->a=1;  //LINE 1
    (t1+2)->a=2;         //LINE 2 
    printf("%d\n%d",t2->tests[1].a,t1[2].a);
}

我刚刚运行了一些代码并制作了这个样本,因为我对输出感到困惑。 如果我使用t2->tests[2].a=1它运行正常。但在这种情况下,编译器会抛出以下内容

error: expected identifier before '(' token

在第2行中,我做了类似的事情。这两者有什么区别?

1 个答案:

答案 0 :(得分:2)

你在LINE 1 =>错误地写了你的左括号。 (t2->tests+2)->a=1;

澄清:当你真正写t2->tests时。这意味着您正在访问t2中的测试地址。您无法访问(tests + 2),因为它会在t2中导致“未知变量”。