2026-09-07
distance.c
#include <stdio.h>
int main(void) {
double arr[4] = {0};
double *p = arr;
double *q = arr + 3;
printf("%td\n", q - p);
}
q - pは何を出力するでしょうか?
Answer
3。pとqはどちらも同じ配列arrの中を指しているので、ポインタ同士の引き算は標準規格で定義された動作です。ここで返るのは2つのポインタの間にある要素数であって、バイト数ではありません。qはpよりdouble3個分だけ先を指しているので、たとえsizeof(double)が8バイトでも結果は24ではなく3になります。ポインタ演算がすでに要素単位でスケーリングされていることの裏返しで、引き算の結果も要素単位のまま返ってくる、という一貫性です。