C言語なら、俺に聞け! <14>
■ このスレッドは過去ログ倉庫に格納されています
0687デフォルトの名無しさん
NGNG> 配列とポインタの交換性が理解できればそんなに難しく無い。
互換性? 配列変数を右辺値として評価するとポインタに縮退するという
特例があるだけで、あとは全然別物だと思うが。
int n, *p, a[10];
こう定義されていたときに n = *p, n = a[0]; を仮想的なアセンブラコードで
書き出すと、次のような感じでしょ? (C 言語なんで実装の詳細は規格で
は規定されていないけど、一般的な実装の話ね)
n = *p;
// mov r1, addr(p) ; 変数 p のアドレスを読み出す
// lod r2, [r1] ; 変数 p の値を読み出す
// lod r3, [r2] ; 変数 p が指している先に書いてある値を読み出す
// mov r4, addr(n)
// store [r5], r3
n = a[0];
// mov r1, addr(a) ; 変数 a のアドレスを読み出す
// add r1, 0 ; 変数 a[0] のアドレスに変換する
// lod r2, [r1] ; 変数 a[0] の値を読み出す
// mov r3, addr(n)
// sto [r3], r2
間接参照の回数が 1 回違う。
■ このスレッドは過去ログ倉庫に格納されています