-2

与えられた:

int a[N];
int *p; 

なぜ機能するのにエラーが発生しa-pないのですかa+p:「バイナリ+へのオペランドが無効です」。

4

2 に答える 2

7

The difference between two pointers is meaningful, i.e. it is the number of elements between the two pointers (provided that they both lie within the same array).

Adding two pointers makes no sense though (how would you interpret it ?).

于 2012-05-26T09:15:06.980 に答える
1

減算は意味があるので、2 つのポインター間の距離です。ポインタの追加は意味がありません。

減算演算子で使用すると、配列は a に減衰し、int*2 つのポインターが (1) 同じ型であり、(2) 同じ配列内の要素を指し、(b) ポインターが pointerT *bより大きい場合T *a、標準は保証しますの結果はと の間の要素b - aの数になります。Tab

ただし、あなたの場合、ポインターは同じ配列内を指していないため、結果a - pは未定義です(コンパイルしても)。

(標準では、いつ、どのように 2 つのポインターを減算できるかについてもう少し具体的であることに注意してください。ただし、これは主にそれです。)

于 2012-05-26T09:19:21.333 に答える