Cクイズ こっちわからん>< - So Many People, So Many Different Ideas
/* MyTypeの定義 */ void set(MyType m, int val); void inc(MyType m); void print(MyType m); int main(void) { MyType m; set(m, 0); /* mを0にセット */ inc(m); /* mをインクリメント */ print(m); /* 1と表示される */ return 0; } /* 各関数の実装 */ このmain関数が、コメントにある期待通り動くようにMyTypeを定義し、各関数を実装することができるか? もちろん、mainの中身は変えないこと。そして、使えるのは、C言語の言語要素のみ。
ぱっと思いついたもの。
/* MyTypeの定義 */ typedef int MyType; void set(MyType m, int val); void inc(MyType m); void print(MyType m); int main(void) { MyType m; set(m, 0); /* mを0にセット */ inc(m); /* mをインクリメント */ print(m); /* 1と表示される */ return 0; } void set(MyType m, int val) { *((int*)(&m + 0x08)) = val; // スタックよこんにちは(アドレスは環境依存 } void inc(MyType m) { (*((int*)(&m + 0x08)))++; // スタックよこんにちは(アドレスは環境依存 } void print(MyType m) { printf("%d\n",m); // えええええええ }
gcc 4.2.1で確認、とかそんなアホなことはない。
とっさにこういうのを思いつくのはイクナイ!!
* * * この答えはうそです + n ∧_∧ n + (ヨ(* ´∀`)E) Y Y *
マジレスするとtypedef int MyType[1];かな。