プロが教える店舗&オフィスのセキュリティ対策術

C言語においては”配列の要素数を超えての参照もコンパイルエラーにはならない”という事がいえます。
例えば
int a[10]={1}; とした時、a[-1] a[11]を参照しても、コンパイルエラーにはなりません。不定値が表示されるか、Red Hat Linuxに関しては”セグメンテーション違反です”とでるだけです。
しかし、わたしはCしか学んではいませんので解りませんが、配列の要素数を超えての参照はコンパイルエラーになる言語もあるのではないかと思います。
C言語はよく”暴走する言語”と言われます。規制をできる限り排除して軽くし、ミスはプログラマが取るという意味に考えています。
”C言語においては配列の要素数を超えての参照もコンパイルエラーにはならないという事”はC言語のその様な設計思想に基ずいた仕様なのでしょうか。
それとも、違う考えに基ずいて、”配列の要素数を超えての参照もコンパイルエラーにはならない”という事に成っているのでしょうか。
宜しく願います。

A 回答 (1件)

C言語で配列の範囲を超えた参照がエラーにならないのは、効率のこともありますし、プログラマがやりたいことを妨げないという意図もあります。



コンパイルエラーにならない理由はこれとは別で、a[i]というのは、実は*(a + i)の意味ですので、先頭要素へのポインタに(暗黙的に)型変換された時点で、すでに配列の要素数に関する情報は落ちてしまっているからです。
    • good
    • 0
この回答へのお礼

いつもご回答頂き有難うございます。
納得させていただきました。

お礼日時:2008/06/22 04:19

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています