

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で質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語初心者 構造体 課題について 2 2023/03/10 19:48
- SQL Server [SQLServer] テーブル名からカラム名を取得する 1 2022/08/23 21:20
- Perl perlで2次元配列をサブルーチンに値渡しで渡す 5 2022/12/17 18:49
- C言語・C++・C# const char** p;のとき、free(p)でC4090エラーとなるのはなぜですか 3 2023/03/31 16:28
- C言語・C++・C# 写真のc言語の問題がa以外わかりません。 正直aも自信がなく、解説していただけないでしょうか? 答え 3 2022/04/29 18:21
- Visual Basic(VBA) VBAで最新のデータを別シートに転記する方法をお教えください。 3 2022/04/07 19:20
- Visual Basic(VBA) EXCEL VBAで教えてください。 1 2022/12/22 04:20
- C言語・C++・C# 10人分の生徒の英語の点数{32,34,41,38,40,26,14,46,42,50} と数学の点 2 2022/05/26 21:31
- Excel(エクセル) エクセルで30日以内に同内容の入力があったら色を付ける 2 2023/03/04 12:32
- 発達障害・ダウン症・自閉症 WAISⅲについて 全検査 99 言語理解 88 知覚統合 110 作動記憶 92 処理速度 86 1 2022/11/22 10:18
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
配列のポインタ?
-
[EXCEL] INDEX関数の不具合?
-
乱数ってなんですか?
-
C言語 配列の長さの上限
-
Functionの戻り値を2次元配列...
-
c言語での文字列の渡し方
-
本日までの累計を表示させたい!
-
配列を返り値、でエラー
-
COBOLのINITIALIZEにあたるもの
-
構造体とポインタ配列
-
MFCで二次元配列のCEditコント...
-
ファイルの読み込みとメモリ確...
-
【エクセルVBA】Functionの引数...
-
プログラムの課題で分からない...
-
=SUNで合計した数値に10%をかけ...
-
C言語
-
Redimした動的配列はEraseする...
-
【速いブラインドタッチ】手を...
-
先頭アドレスとは何ですか?
-
プログラミングの質問です!!!
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語 配列の長さの上限
-
配列を使わずに、変数名を動的...
-
C# Listを使わずに2次元配列の...
-
【速いブラインドタッチ】手を...
-
配列をEraseしてもメモリが開放...
-
テキストファイルから文字列を...
-
先頭アドレスとは何ですか?
-
配列で格納したものをmsgboxで...
-
複数の選択範囲の行番号を個別...
-
C# 配列の変数宣言について。
-
C++ vectorに配列をプッシュしたい
-
配列を含む構造体の初期値について
-
VBで構造体の配列を関数に渡す...
-
C言語で特定列だけを抽出して配...
-
キーボードのキー配列について
-
ExcelVBAで質問です。離れた二...
-
2次元配列を戻り値とする関数?
-
unsigned char配列への入力の仕方
-
【C言語】配列の中に配列を入れ...
-
Redimした動的配列はEraseする...
おすすめ情報