>백엔드 개발 >C++ >정수 포인터를 증가시키면 1 대신 4바이트가 추가되는 이유는 무엇입니까?

정수 포인터를 증가시키면 1 대신 4바이트가 추가되는 이유는 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-11-25 22:23:12362검색

Why Does Incrementing an Integer Pointer Add 4 Bytes Instead of 1?

Int 포인터 증가: 왜 4바이트 증가인가요?

포인터로 작업할 때 Int 포인터 증가를 예상하는 것이 직관적일 수 있습니다. int 포인터는 배열에서 발생하는 것처럼 값을 1바이트씩 증가시킵니다. 그러나 실제로는 int 포인터를 증가시키면 그 값이 실제로 4바이트 증가합니다.

4바이트 증가의 이유

이러한 동작의 이유는 다음과 같습니다. 정수 데이터 유형의 크기. int는 일반적으로 4바이트의 메모리를 차지합니다. int 포인터가 1바이트만 증가하면 부분 정수를 가리키는 결과가 나오며 이는 무의미합니다.

포인터 증가 이해

설명하려면 다음 메모리 표현을 고려하십시오.

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

여기서 각 int가 차지합니다. 4바이트. int 포인터가 1씩 증가하면 아래와 같이 논리적으로 다음 4바이트 섹션으로 이동하는 것이 합리적입니다.

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

이렇게 하면 포인터가 계속해서 유효한 정수를 가리킬 수 있습니다.

개별 바이트 액세스

개별 바이트에 액세스해야 하는 경우 정수인 경우 char 포인터를 활용할 수 있습니다. char의 크기는 항상 1바이트이므로 char* 포인터를 사용하여 한 번에 1바이트씩 증가하고 해당 바이트의 정수에 액세스할 수 있습니다.

예:

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

char* c = (char*)p;
char x = c[1]; // access the second byte of the integer

추가 참고 사항:

void는 불완전한 유형이고 정의된 크기가 없으므로 void* 포인터를 증가시키는 것은 허용되지 않는다는 점을 기억하는 것이 중요합니다.

위 내용은 정수 포인터를 증가시키면 1 대신 4바이트가 추가되는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.