C言語における実装
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2022/02/20 07:41 UTC 版)
C言語では上述の配列を、添字演算子 [] を用いて base[index] と表すか、あるいは間接参照演算子 * を用いて *(base + index) と表すことができる。C言語の標準的な実装では、添字演算子による表現も間接参照演算子による表現も全く等価であり、前者の添字演算子による参照は後者のアドレスと間接参照演算子を用いた形に変換される。間接参照による表現 *(base + index) を見れば明らかなように、base と index は交換可能である。したがって、index[base] と base[index] は等価である。 C++など他のプログラミング言語においても、配列のようなコンテナをC言語と同様に添字演算子を用いて表現することがあるが、添字演算子の定義は上述のC言語におけるものと必ずしも同一でなく、特に間接参照演算子やアドレス演算子 & との組み合わせについて注意を要する。たとえば単純な配列では添字演算子の左右のオペランドは交換可能だが、通常用いられる多くのコンテナにおいては交換可能ではない。まず、一般には *base は base[0] と等価ではなく、base は &base[0] と等価ではない。また、素朴な配列では base 自身がデータ領域の先頭アドレスを指すポインタ変数として扱われ、整数との加算が定義されたイテレータの役割を果たすが、一般のコンテナでは base はイテレータ型でないかイテレータであっても整数との加算が定義されていないため、*(base + index) という記述も未定義である。
※この「C言語における実装」の解説は、「添字表記法」の解説の一部です。
「C言語における実装」を含む「添字表記法」の記事については、「添字表記法」の概要を参照ください。
- C言語における実装のページへのリンク