配列の境界を離れない限り、ポインター演算が定義されていることを常に読んでいます。これが何を意味するのか完全に理解できているかどうか確信が持てず、少し心配していました。したがって、この質問。
配列の先頭へのポインターから始めるとします。
int *p = (int*) malloc(4 * sizeof(int));
ここで、配列の境界外にある 2 つの新しいポインターを作成します。
int *q = p + 10;
int *r = p - 2;
ポインタq-10
、q-9
、 ...、r+2
、r+3
などはすべて、配列の境界内にあります。それらは有効ですか?たとえば、?と同じ結果が得られることがr[3]
保証されています。p[1]
私はいくつかのテストを行いましたが、動作します。しかし、これが通常の C 仕様でカバーされているかどうかを知りたいです。具体的には、Visual Studio 2010、Windows を使用しており、ネイティブ C (C++ ではない) でプログラミングしています。私はカバーされていますか?