1 つ以上の親配列/構造体/共用体にネストされている 1 つの配列/構造体/共用体で複数の数値/文字列を読み取る最良の方法は何ですか?
一時変数のない最初の例:
printf("%d %d\n", a[9][3], a[9][4]);
一時変数を使用した最初の例:
int *b = a[9];
printf("%d %d\n", b[3], b[4]);
上記の最初の例の一時変数は非常にばかげていると思いますが、下の 2 番目の例では意味があり、1 つを使用した方がよさそうですよね?
一時変数のない 2 番目の例:
foo[i]->bar.red[j][0]++;
foo[i]->bar.red[j][1]++;
foo[i]->bar.red[j][2]++;
foo[i]->bar.red[j][3]++;
一時変数を使用した 2 番目の例:
int *p = foo[i]->bar.red[j];
p[0]++;
p[1]++;
p[2]++;
p[3]++;
では、どこに線を引きますか?コンパイラは、この方法で最適な効率のアセンブリを生成するために必要な間接処理を挿入するのに十分スマートであることを認識していますが、(非常にパフォーマンスが重要なコードを想定して) 例外があるのでしょうか? また、コードの明快さ/保守性の観点から、経験則は何ですか?