ヌルポインターの場合、ポインター演算は許可されていません。しかし、私がこのようなものを持っていると想像してください: class MyArray { int *arrayBegin; // pointer to the first array item, NULL for an empty array unsigned arraySize; // size of the array, zero for an empty array public: int *begin() const { return arrayBegin; } int *end() const { return arrayBegin + arraySize; } // possible? (arrayBegin …
Cでは、ポインターが同じ配列またはその配列の終わりを過ぎた1つの要素を参照する場合、演算と比較は明確に定義されていると言われています。次に、配列の最初の要素の前の1つはどうですか?私がそれを逆参照しない限り、それは大丈夫ですか? 与えられた int a[10], *p; p = a; (1)書くことは合法--pですか? (2)p-1式を書くことは合法ですか? (3)(2)が問題ない場合、それを主張できp-1 < aますか? これには実際的な懸念があります。reverse()で終わるC文字列を逆にする関数を考え'\0'ます。 #include <stdio.h> void reverse(char *p) { char *b, t; b = p; while (*p != '\0') p++; if (p == b) /* Do I really need */ return; /* these two lines? */ for (p--; b …