質問: 0; while (i < cnt) { printf("%d: 住所:%s 氏名:%s 電話番号:%s\n", ++i, ap->szAdd, ap->szName, ap->szTel); ap++; // 配列へのポインタが次の配列要素を指すようにする } return cnt; } ```
回答: > > 質問1:if (1 <= i && i <= 5) cnt = funci - 1; > > > 関数へのポインターは5要素あり、iはそのどの要素の関数かを示すインデックス(ただしCで普通にもちいるような0始まりのインデックスではなくなぜか1始まりとしているようです)で、 `funci-1]`はi番目の要素の関数ポインター`func[i-1`はその関数ポインターが指す関数を、adとcntを引数にして呼び出すコードです。 > > 質問2:while (j++ < cnt){}条件がよくわかりません > > > このプログラムは誰が書いたか知りませんが・・・これは本来 ``` for (int j = 0; j < cnt; j++) { ... } ``` と書くべきように思えます。個人的な意見としてはひどいコードです。jが0で初期化されてるのは関数の先頭の変数宣言ですね。そもそもjはこのループ内部でしか参照されていないように見えますので「なぜ関数の先頭で宣言しなけりゃいけないの?」と思ってしまいます。もし勉強のためのこのコードを見ているならあえて言わせていただければ「やめた方がよい」です。 > > 質問3:for (j = i - 1; j < cnt - 1; j++) > > ap[j]= ap[j + 1];がいまいちわかりません。 > > > これは配列の各要素を順番に先頭方向へひとつずつずらしているコードです。これがわからないとするとループについてご自分でプログラムを書いて経験を積むべきと思います。また質問の際に「いまいちわからない」という表現は禁句と思ってください。閲覧者にも「あなたに何がわからないのかイマイチわかりません」わからないことを具体的に書いてください。