Namaran

Code daily. Without assist.

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

3pqはどちらも同じ配列arrの中を指しているので、ポインタ同士の引き算は標準規格で定義された動作です。ここで返るのは2つのポインタの間にある要素数であって、バイト数ではありません。qpよりdouble3個分だけ先を指しているので、たとえsizeof(double)が8バイトでも結果は24ではなく3になります。ポインタ演算がすでに要素単位でスケーリングされていることの裏返しで、引き算の結果も要素単位のまま返ってくる、という一貫性です。