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を探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/12】 急に朝起こしてきた母親に言われた一言とは?
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・好きな「お肉」は?
- ・あなたは何にトキメキますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・チョコミントアイス
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・あなたの習慣について教えてください!!
- ・ハマっている「お菓子」を教えて!
- ・高校三年生の合唱祭で何を歌いましたか?
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・家の中でのこだわりスペースはどこですか?
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語 配列の長さの上限
-
配列を使わずに、変数名を動的...
-
C# Listを使わずに2次元配列の...
-
複数の選択範囲の行番号を個別...
-
先頭アドレスとは何ですか?
-
【C言語】配列の中に配列を入れ...
-
unsigned char配列への入力の仕方
-
C言語で特定列だけを抽出して配...
-
C# 配列の変数宣言について。
-
配列を含む構造体の初期値について
-
配列の参照渡しで型が一致しま...
-
市販のビンゴカードについて
-
フィボナッチ数列をつくってみ...
-
配列の重複削除について
-
c言語でのヒストグラム作成用の...
-
C言語で巨大配列を作るにはどう...
-
テキストファイルから文字列を...
-
defineを使った配列
-
ポインタの配列のコンマについて
-
Cygwinについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語 配列の長さの上限
-
配列を使わずに、変数名を動的...
-
先頭アドレスとは何ですか?
-
C# 配列の変数宣言について。
-
配列で格納したものをmsgboxで...
-
C# Listを使わずに2次元配列の...
-
VBで構造体の配列を関数に渡す...
-
テキストファイルから文字列を...
-
C言語で特定列だけを抽出して配...
-
Excel、VBAのユーザーフォーム...
-
【C言語】配列の中に配列を入れ...
-
配列を含む構造体の初期値について
-
unsigned char配列への入力の仕方
-
複数の選択範囲の行番号を個別...
-
【速いブラインドタッチ】手を...
-
配列の参照渡しで型が一致しま...
-
ExcelVBAで質問です。離れた二...
-
VB.NET 構造体の配列の検索機能...
-
VBでC言語のポインタみたい...
-
Redimした動的配列はEraseする...
おすすめ情報