Programing

int 포인터 '++'가 1이 아니라 4가 증가하는 이유는?

c10106 2022. 5. 6. 19:42
반응형

int 포인터 '++'가 1이 아니라 4가 증가하는 이유는?

포인터 값은 변수의 주소입니다.왜 가치가 있는가?int pointer인트 포인터가 1 증가된 후 4인치 증가하였다.

내 생각에 포인터(변수의 주소)의 값은 포인터 증분 후에 1바이트만 증가하는 것 같아.

테스트 코드:

int a = 1, *ptr;
ptr = &a;
printf("%p\n", ptr);
ptr++;
printf("%p\n", ptr);

예상 출력:

0xBF8D63B8
0xBF8D63B9

실제 출력:

0xBF8D63B8
0xBF8D63BC

편집:

다른 질문 - 4바이트 a를 방문하는 방법int하나 둘씩 차지할까?

a를 증분할 때T*, 그것은 움직인다.sizeof(T)바이트. 이것은 다른 값을 이동하는 것이 말이 되지 않기 때문이다: 만약 내가 a를 가리키고 있다면int예를 들어, 4바이트 이하로 증가하면 나에게 남은 것은 무엇인가?부분적int일부 다른 데이터와 혼합: 비논리적.


메모리에서 다음 사항을 고려하십시오.

    [↓      ]
[...|0 1 2 3|0 1 2 3|...]
[...|int    |int    |...]

포인터를 늘리면 더 이해가 되는 건?다음 내용:

            [↓      ]
[...|0 1 2 3|0 1 2 3|...]
[...|int    |int    |...]

또는 다음 중 하나를 선택하십시오.

      [↓      ]
[...|0 1 2 3|0 1 2 3|...]
[...|int    |int    |...]

마지막은 실제로 어떤 종류의 것도 가리키지 않는다.int. (기술적으로, 그 포인터를 사용하는 것은 UB이다.)

1바이트를 이동하려면 a를 증가시키십시오.char*: 의 크기char항상 하나:

int i = 0;
int* p = &i;

char* c = (char*)p;
char x = c[1]; // one byte into an int

③이것은 증분할 수 없다는 것이다.void*왜냐하면void불완전한 유형이다.

포인터는 포인터가 가리키는 유형의 크기로 증가한다. 포인터가 char를 가리킬 경우,pointer++1234바이트 구조체를 가리키면 포인터가 1씩 증가한다.pointer++포인터를 1234만큼 증가시킨다.

처음 만났을 때 헷갈릴 수도 있지만, 사실 말이 되긴 하지만, 이것은 특별한 프로세서 기능이 아니라 컴파일러가 컴파일 중에 계산하기 때문에, 당신이 글을 쓸 때pointer+1컴파일러는 그것을 다음과 같이 편찬한다.pointer + sizeof(*pointer)

그 아이디어는 증분 후에 포인터가 기억 속의 다음 부분을 가리킨다는 것이다.ints 폭은 4바이트이므로 4바이트씩 증가한다.일반적으로 유형 T에 대한 포인터는 크기(T)에 따라 증가한다.

말씀하신 대로 anint pointer을 가리키다intint일반적으로 4바이트를 차지하므로 포인터를 증가시키면 "다음"을 가리킨다.int메모리 - 즉, 4바이트 증가.그것은 어떤 크기의 유형에도 이런 식으로 작용한다.입력할 포인터가 있는 경우A, 그런 다음 증분A*에 의해 증가될 것이다.sizeof(A).

생각해 보십시오. 포인터를 1바이트만 증가시키면 포인터가 한 가운데를 가리킬 때보다int이런 기회가 어디 있는지 생각나지 않아

예를 들어, 이 동작은 배열 위에 반복할 때 매우 편안하다.

포인터는 기억 속에 있는 무언가의 시작을 가리킨다.INT는 4바이트(32비트)를, Double은 8바이트(64비트)의 메모리를 점유한다.따라서 DUBLE 번호가 저장되어 있고 다음 사용 가능한 메모리 위치를 가리키는 매우 낮은 레벨에서 원하는 경우 포인터가 8바이트 증가될 수 있다.어떤 이유로 DUBLE 값을 시작할 때부터 +4바이트를 가리켰다면 DUBLE 값을 손상시킬 것이다.기억은 그 자체로 양심이 없는 아주 큰 평지장이기 때문에 그것을 적절히 나누고 그 분야에 위치한 항목의 '경계'를 존중하는 것은 소프트웨어에 달려 있다.

참조URL: https://stackoverflow.com/questions/5610298/why-does-int-pointer-increment-by-4-rather-than-1

반응형