2

不可解な質問があります(少なくとも私にとっては)

整数配列を宣言するとします。

int arr[3];

概念的には、コンパイル時に 3 つの連続する整数を格納するために 12 バイトがメモリに割り当てられるということですよね。(ここにイラストがあります

図に基づいて、サンプルアドレス

arr[0]1000

arr[1]であり1004

arr[2]です1008


私の質問は:

と のアドレスの差を出力するarr[0]arr[1]:

std::cout << &arr[1] - &arr[0] << std::endl;

を得る代わりに4

私は驚くほど得1ます。

なぜその出力になったのか、誰か説明できますか?

PS: 私のコンピューターでは、int は 4 バイトです。

4

1 に答える 1

0

ポインタ算術は値を基本型のサイズで自動的に除算するので、これはまったく驚くべきことではありませ4 / 41。にキャストしunsignd char *て違いを確認します。

#include <iostream>

int
main(void)
{
    int arr[2];

    std::cout << &arr[1] - &arr[0] << std::endl;
    std::cout << reinterpret_cast<unsigned char *>(&arr[1]) -
        reinterpret_cast<unsigned char *>(&arr[0]) << std::endl;

    return 0;
}
于 2016-05-14T14:58:58.760 に答える