为什么最后一行打印2而不是8?

时间:2018-08-21 00:55:27

标签: c pointers pointer-arithmetic

&array[0]&array[2]分别打印正确的值,它们分别是array [0]和array [2]的地址。但是,当我减去两者时,将打印2而不是8,这是两个地址的差。

C标准的哪些相关部分解释了为什么输出是2而不是8的原因?

改编自http://fabiensanglard.net/c/index.php

#include <stdio.h>

int main() {
    int array[] = {41,1821,12213,1645,20654} ;
    int* pointer = array;

    printf("%d %d %d %d\n", sizeof array, sizeof pointer, sizeof(int*), sizeof &array[2]);
    printf("%ld %ld %ld %ld\n", sizeof array[0], sizeof &array, array[0], &array[0]);
    printf("%ld %ld %ld %ld\n", sizeof array[2], sizeof &array, array[2], &array[2]);
    printf("%d\n", (&array[2]) - (&array[0]));

}

0 个答案:

没有答案