

No.2ベストアンサー
- 回答日時:
こんにちは。
a[] 配列が0から始まるのはその中身が配列スタートからの距離だからです。
a[0]は配列a[]のスタート地点です。
a[1]はa[]のスタート地点から1つ分離れた場所の値ということになります。
おそらくポインタをこれから習うと思いますが、
*p = a とした場合は *(p+1) の値は a[1] の値と同じになります。
本来の意味合いは異なりますが。
ご参考までに。
No.8
- 回答日時:
なんというか、簡単に云えばコンピュータにとっては0から始まって
いる方が自然で分かりやすいわけです。
プログラミング言語はマシン語を少々人間に分かりやすくした
アセンブリ言語を更に人間に分かりやすくするために作られたもの
ですが、結局はコンピュータ本位なのでコンピュータに合わせなければ
いけません。
何故、0から始まるのはというのを考えようとしても難しい話に
なってしまいますので、単にそういうものだと覚えちゃった方が
簡単でしょう。
確かにプログラミング言語によっては添字が1から始まるものも
ありますが、それはそういう仕様で作成しているだけです。
ただ、歴史的には0から始まるものだったので基本としてそのような
仕様のものが多いです。
また、途中から変更してしまうと混乱も招きます。
No.6
- 回答日時:
>C言語の配列番号は"0"から始まりますが
他の言語だと、VisualBasic(Basic), Java, C#等も0から
始まりますが、FORTRAN, COBOL等の様に1から始まる物も
あります。
件名:配列の添字が0から始まるメリットは?
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.ph …
No.4
- 回答日時:
CPUがどう配列を処理しているかの観点で考えるといいですよ。
int a[5];
と定義します。
a の アドレスが 0x1000 だったとします。
つまり、
a の1番目のアドレスは 0x1000
a の2番目のアドレスは 0x1001
~~~~~~略~~~~~~~
a の5番目のアドレスは 0x1004
となります。
CPU は a[x] と指定された時、
0x1000 + x の位置として計算しますので、
1番目をさすには x は 0 である必要があります。
他の言語は...知りませんw
添え字をデクリメントしてるんでしょうかねぇ?
No.3
- 回答日時:
ポインタと配列を同じ取り扱いにしているからです。
char a[5];
char *p = a;
とあるときに、
配列へのアクセス a[i] と、
ポインタへのアクセス *(p+i) は、まったく同じ意味になります。
(それどころか、配列に対して *(a+i) というアクセスもできるし、
ポインタに対して p[i] というアクセスも可能。)
C言語においては、配列アクセスのa[i] という表記方法は、
*(a+i) を、より分かりやすく記述するためのおまけ(シンタックスシュガー)なのです。
(だから、トリッキーですが i[a] という表記もアリです。i[a] は *(i+a) を意味しますから、*(a+i) である a[i] とまったく同じ意味になります。)
このようなアクセス方法では、配列の要素へのアクセスは、
「先頭からいくつずらした要素にアクセスするのか」を意味します。
ですので、先頭の要素は、一つもずらしていない所の要素ということで、
配列の添え字は0から始まるのです。
添え字が1の場合は、1つずらした要素=先頭から2番目の要素、ということになります。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語 配列の長さの上限
-
配列を使わずに、変数名を動的...
-
C# Listを使わずに2次元配列の...
-
先頭アドレスとは何ですか?
-
配列をEraseしてもメモリが開放...
-
テキストファイルから文字列を...
-
unsigned char配列への入力の仕方
-
配列で格納したものをmsgboxで...
-
【速いブラインドタッチ】手を...
-
多次元配列とポインタ渡しについて
-
C# 配列の変数宣言について。
-
VBで構造体の配列を関数に渡す...
-
C言語でcharの足し算
-
C言語で特定列だけを抽出して配...
-
C++ vectorに配列をプッシュしたい
-
9枚の写真がA4 1枚に印刷できま...
-
MIPSアセンブリ言語で配列を宣...
-
ExcelVBAで質問です。離れた二...
-
複数のボタンを配列で扱う方法...
-
VB.netの配列とVB6の配列の違い
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語 配列の長さの上限
-
C# Listを使わずに2次元配列の...
-
配列を使わずに、変数名を動的...
-
配列で格納したものをmsgboxで...
-
【速いブラインドタッチ】手を...
-
配列をEraseしてもメモリが開放...
-
ExcelVBAで質問です。離れた二...
-
Redimした動的配列はEraseする...
-
C# 配列の変数宣言について。
-
複数の選択範囲の行番号を個別...
-
VBで構造体の配列を関数に渡す...
-
先頭アドレスとは何ですか?
-
配列の参照渡しで型が一致しま...
-
銀行ATMの数字キーの配列
-
配列を含む構造体の初期値について
-
C言語で特定列だけを抽出して配...
-
unsigned char配列への入力の仕方
-
VB.NET 構造体の配列の検索機能...
-
C++ vectorに配列をプッシュしたい
-
C言語初心者 構造体 課題について
おすすめ情報