【初心者歓迎】C/C++室 Ver.33【環境依存OK】

このエントリーをはてなブックマークに追加
908デフォルトの名無しさん
>>901
配列の範囲チェックをしないから。そもそもa[i]は(宣言以外では)*(a+i)と等価。
ポインタ演算の形だとピンと来ないから配列という形でわかりやすくしてるだけ。
だから可変長メンバを持つ構造体なんて反則スレスレの事も出来る。
struct hoge{
int a;
char s[1];
};
// メンバsを20byte分確保するmalloc
struct hoge *p = (struct hoge *)malloc(sizeof(struct hoge)+sizeof(char)*(20-1));
p->s[5] = 'n';// エラーにならない(はず)

ANSI Cではこれは反則。でも大抵の処理系では動く。
C99では専用の書き方(char s[])があるけど。