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 でも同様のことをしました。2つの違いは何ですか?

4

1 に答える 1