찾다

 >  Q&A  >  본문

c++ - 为什么这两个指针之间的距离是3?

#include <iostream>
#include <iterator>

int main()
{
    int a, b;
    int *c = &a, *d = &b;
    std::cout << std::hex << c << " " << d << std::endl;
    std::cout << std::hex << std::distance(d, c) << std::endl;
    return 0;
}

我运行时显示
c和d的值是00FDF7EC 00FDF7E0
std::distance(d, c)求出的值是3
可是他们地址相差不是C么,为什么是3?

PHP中文网PHP中文网2814일 전649

모든 응답(3)나는 대답할 것이다

  • 怪我咯

    怪我咯2017-04-17 15:29:32

    std::distance는 주소 차이가 아닌 반복자의 거리를 반환합니다.
    예를 들어 std::distance(list::begin(),list::end())를 사용하여 연결된 목록에 있는 두 반복자 사이의 수를 계산할 수도 있으며, 우리는 주소가 연결리스트의 순서가 맞지 않습니다.
    위의 포인터 c도 세 번 후에 d의 위치에 도달합니다. int*의 는 매번 sizeof(int)를 이동합니다.
    일반적으로 거리의 구현은 for 루프에서 반복자를 이동한 다음 비교하여 둘 사이의 거리를 기록하는 것입니다.

    회신하다
    0
  • 大家讲道理

    大家讲道理2017-04-17 15:29:32

    std::distancedc 사이의 바이트 수가 아니라 dc 사이의 元素 수를 반환합니다. 여기서 元素c 유형을 나타냅니다. dint이 속한 것입니다.

    int의 크기가 4 bytes이므로 元素个数 = (C - 0) / 4 = 3

    회신하다
    0
  • 大家讲道理

    大家讲道理2017-04-17 15:29:32

    으아아아

    c는 스택의 상위 주소에 있는 a에 대한 포인터입니다

    d는 스택의 낮은 주소에 있는 b에 대한 포인터입니다

    c와 d의 차이는 12바이트인데, 12바이트는 int형 3개 크기가 차지하는 바이트입니다

    으아아아

    따라서 c와 d 사이의 거리는 3 int 유형 크기 바이트입니다

    포인터가 이동하는 덧셈과 뺄셈의 거리는 포인터가 가리키는 글자의 크기입니다

    이 문제의 포인터 덧셈과 뺄셈 결과는 int 개수(4바이트)가 되며 포인터는 비트 연산을 수행하지 않습니다

    회신하다
    0
  • 취소회신하다