[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 2chのread.cgiへ]
Update time : 05/09 11:54 / Filesize : 190 KB / Number-of Response : 656
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

僕は独学でC言語やってるんですv



36 名前:32 mailto:sage [2007/05/09(水) 17:49:16 ]
>>33
ついでなので>>13をなんとなく解説してみるtest、改行制限でちと見辛い

>void print0(){ printf("print0\n"); } // 表示関数の実体の定義
 :
>void print4(){ printf("print4\n"); }
>typedef void(*voidfunc_t)(); // void型引数なし関数へのポインタ型voidfunc_tの定義
// voidfunc_t型を返す関数asdfの定義
// この関数は、引数aと引数bの内容を入れ替え、元の引数aの内容を返す
>voidfunc_t*asdf(voidfunc_t*a,voidfunc_t*b){
> voidfunc_t*t=a; a=b; return b=t;
>}
// ↑例:a[0]=print0、a[1]=print1の場合、
// asdf(&a[0], &a[1]) を呼び出すと、戻値は関数print0()へのポインタとなり、
// 実行後はa[0]がprint1()を、a[1]がprint0()を指す事になる
>int main(void){
> void(*a[5])(); // 「void型で引数なしの関数」へのポインタ5個分の配列の宣言
> voidfunc_t*(*f)(voidfunc_t*,voidfunc_t*); // voidfunc_t型関数へのポインタの宣言
> [ X ] // 何か足りない所
> f=asdf; // voidfunc_t型関数へのポインタへvoidfunc_t型関数の実体(のポインタ)を代入
// f(&a[1],&a[2]) → asdf(&a[1],&a[2]) = 実行後のa[2]へのポインタ
// よって、f(&a[0],f(&a[1],&a[2])) → asdf(&a[0],&a[2])
> f(&a[2],f(&a[3],f(&a[4],f(&a[0],f(&a[1],&a[2])))));
// a[0]〜a[4]を呼び出す、設問から推測すると表示関数の筈
> for(int i=0;i<5;i++) (a[i])();
> return 0;
>}

なので、必要なのは void(*a[5])(); の中身、つまり「表示関数へのポインタ」の代入
いじょ、なんか間違ってたらスマヌ






[ 続きを読む ] / [ 携帯版 ]

全部読む 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<190KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef