0

这是示例代码的片段:

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.

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

4

1 回答 1

2

您在第 1 行写错了左括号 =>(t2->tests+2)->a=1;

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

于 2013-10-27T19:57:32.160 回答