0

int にポインターを追加し、2 つのポインター、およびポインターと int を減算できることは知っていますが、ポインターに int を追加できますか。つまり、5 + ポインタです。

4

2 に答える 2

3

できますが、制限が適用されます。ポインター演算は、配列内 (または配列の末尾の 1 つ後) でのみ有効です。

ルールの一部を次に示します。

5.7 加法演算子 [expr.add]

5) [...] ポインター オペランドと結果の両方が同じ配列オブジェクトの要素を指している場合、または配列オブジェクトの最後の要素の 1 つ後ろを指している場合、評価はオーバーフローを生成しません。それ以外の場合、動作は未定義です。

6) 同じ配列オブジェクトの要素への 2 つのポインターを減算すると、結果は 2 つの配列要素の添字の差になります。[...] 両方のポインターが同じ配列オブジェクトの要素、または配列オブジェクトの最後の要素の 1 つ後ろを指していない限り、動作は未定義です。

確認のためにここに貼り付けます。

そう

int* x = new int;
int* y = new int;

大丈夫ですが:

y-x;
x + 4;
y - 1;

またはバイナリ比較演算子を使用した比較でさえ、未定義の動作です。

ただし、問題x+1あり1+xません (単一のオブジェクトはサイズ 1 の配列としてカウントされます)。

于 2013-02-16T00:20:32.267 に答える
0

ポインターに を追加するintことは構文的には問題ありませんが、オーバーフロー エラーなど、注意しなければならない問題が非常に多くあります。

理想的には、配列内でのみ実行する必要があります。

于 2013-02-16T00:26:28.910 に答える