C++ 포인터 연산

C Pointeo Yeonsan



이 문서는 C++의 포인터 연산에 관한 것입니다. 포인터는 데이터의 메모리 주소를 저장하는 변수입니다. 포인터 산술은 C++ 프로그래밍 언어 세계의 강력한 특징으로, 덧셈, 곱셈, 나눗셈, 증가, 감소 및 뺄셈에 포인터를 사용하여 메모리 버퍼에 새 메모리 주소를 생성하는 다양한 산술 연산을 처리할 수 있게 해줍니다. . 포인터 연산은 동적 메모리 할당을 쉽게 생성합니다. 이 C++ 기사에서는 포인터를 사용하여 다양한 방법으로 메모리 주소를 조작하는 방법을 배우고 적절한 지침과 예제를 제공합니다.

시나리오 1: 포인터가 증가 및 감소 작업을 수행합니다.

여기서는 다양한 목적을 가진 다양한 메모리 주소를 생성하기 위한 포인터 조작에 대해 알아봅니다. 증가 및 감소 포인터는 가리키는 데이터 유형의 크기에 1을 곱하여 주소를 늘리거나 줄이는 레버리지 포인터 산술이기도 합니다. 이 시나리오와 관련된 코드 조각은 다음에 첨부되어 있습니다.







#include
네임스페이스 std 사용;
const int Arr_Max = 5 ;
정수 메인 ( ) {
int  여기서 [ Arr_Max ] = { 이십 , 150 , 270 } ;
정수 * ptr; // 선언하다 바늘
ptr = var;
~을 위한 ( 정수 나는 = 0 ; 나 < Arr_Max; 나++ ) {
표준::cout << '요소의 메모리 주소는 : [' << << '] = ' ;
표준::cout << ptr << 끝;
시합 << '주소에 대한 값은 ['입니다. << << '] = ' ;
시합 << * ptr << 끝;
표준::cout << '포인터가 성공적으로 증가했습니다' << 끝;
ptr++;
}
표준::cout << '감소 전 포인터 주소' << ptr << 끝;
ptr--;
표준::cout << '감소 후 포인터 주소' << ptr << 끝;
반품 0 ;
}


여기서는 시작 부분의 코드에 필수 라이브러리인 ' '을 정의합니다. 우리는 'Arr_Max=5'인 메모리 공간을 예약하기 위해 메모리 할당을 정의합니다. 메인 함수에서는 배열을 초기화하고 메모리 크기를 해당 배열에 전달합니다. 다음으로, 메모리의 메모리 주소를 가리키는 'ptr' 포인터 선언도 필요합니다.

주소에 접근하기 위해 배열을 포인터에 전달합니다. 우리 모두 알고 있듯이 배열은 항상 서로 다른 위치에 여러 항목을 포함합니다. 따라서 배열의 모든 요소에 액세스하려면 '도움말' 포인터가 있는 루프가 필요했습니다. 루프가 실행될 때마다 메모리 주소를 메모리의 다음 주소로 이동하는 포인터 산술 'ptr++' 증분 연산자를 사용하여 이 주소에 대한 메모리 주소와 값을 얻습니다. 루프 실행 주기는 배열의 크기에 따라 달라집니다. 루프 외부에서 'ptr- -' 감소 포인터를 사용하여 포인터를 이전 메모리 주소로 다시 가져오고 싶습니다.

Execute>Compile & Run 옵션을 클릭하여 이 코드를 실행하면 다음과 같은 출력이 표시됩니다.


이 출력이 이해하기 쉽기를 바랍니다. 메모리 주소와 값이 변경됩니다. 한 위치에서 포인터를 이동하는 것은 C++의 증분 포인터 연산에서만 가능합니다.

시나리오 2:  C++에서 두 포인터 빼기

이 시나리오에서는 C++에서 두 개 이상의 포인터를 빼는 방법을 알아봅니다. 뺄셈이 이루어지는 모든 산술 연산은 두 포인터가 동일한 데이터 유형을 갖는 경우에만 두 포인터를 동시에 뺄 수 있으므로 중요한 프로세스입니다.

덧셈, 곱셈, 나눗셈과 같은 다른 연산은 메모리 주소 지정에서는 의미가 없기 때문에 포인터에서는 불가능합니다. 코드 조각은 다음에 첨부되어 있습니다.

#include
정수 메인 ( ) {
그는 손짓한다 [ ] = { 23 , 36 , 42 , 51 , 62 , 77 , 89 , 96 , 100 } ;
정수 * ptrr1 = & 그것에 [ ] ; // 세 번째 요소에 대한 포인터 ( 42 )
정수 * ptrr2 = & 그것에 [ 6 ] ; // 여섯 번째 요소에 대한 포인터 ( 89 )
ptrdiff_t ptr뺄셈 = ptrr2 - ptrr1;

표준::cout << '이 주소 간의 차이점은 다음과 같습니다. ' << ptr뺄셈 << '요소' << 표준::endl;
반품 0 ;
}


빼기 연산은 C++에서 메모리 주소의 차이를 찾는 것입니다. 메인 함수에서는 서로 다른 인덱스에 서로 다른 값을 포함하는 배열을 사용합니다. 배열에서 모든 인덱스는 서로 다른 메모리 위치를 갖습니다. 우리는 포인터 연산을 통해서만 두 포인터 사이의 차이점을 찾을 수 있습니다. 여기서는 C++에서 두 개 이상의 포인터 간의 차이점을 찾는 데 사용해야 하는 특수 포인터 유형 'ptrdiff_t'를 사용합니다.

이 코드의 출력은 다음에 첨부되어 있습니다.


이들 주소 간의 차이는 요소 바이스(3)에 따른 것입니다.

시나리오 3: C++에서 두 개 이상의 포인터 비교

이 시나리오에서는 '==', '<=', '>=', '<', '>'와 같은 다양한 관계 연산자를 사용하여 C++의 다양한 포인터를 비교하는 방법을 알아봅니다. 포인터가 동일한 배열의 요소 주소를 가리키는 경우에만 포인터를 비교할 수 있습니다. 두 포인터를 서로 다른 유형으로 비교하면 정의되지 않은 동작이 발생할 수 있다는 점을 기억하세요. 포인터 비교와 관련된 코드 조각은 다음과 같습니다.

#include
네임스페이스 std 사용;
정수 메인 ( )
{
정수 arr1 [ 10 ] = { 4 , 7 , 9 , 열하나 , 14 , 16 , 18 , 이십 , 22 , 25 } ;
정수 * ptr1 = & 도착1 [ ] ;
정수 * ptr2 = & 도착1 [ 6 ] ;
정수 * ptr3 = & 도착1 [ 8 ] ;
정수 * ptr4 = & 도착1 [ 9 ] ;
만약에 ( ptr1 ==ptr2 )
{
표준::cout << '포인터는 동일합니다' << 끝;
}
또 다른 만약에 ( ptr3 < =ptr4 )
{
표준::cout << 'ptr3은 ptr4보다 작거나 같습니다.' << ;;
}
또 다른
{
표준::cout << '포인터는 어떤 단계에서도 비교되지 않습니다' << 끝;
}
반품 0 ;
}


여기서는 10개의 요소로 구성된 배열을 사용합니다. 배열의 다른 인덱스를 가리키는 네 개의 포인터를 선언합니다. 그런 다음 주어진 코드에서 볼 수 있듯이 서로 다른 조건에서 이 네 가지 포인터를 비교합니다. 'if' 조건에서 'ptr1' 포인터가 'ptr2' 포인터와 같은지 확인한 다음 '포인터가 같음'을 인쇄합니다. 'ptr3' 포인터가 'ptr4' 포인터보다 작은지 확인하기 위해 'else if' 조건을 사용하는 여러 조건이 있는 경우. 다 마친 후 다음을 클릭하세요. 실행 > 컴파일 및 실행 옵션.

이 코드의 출력은 다음에 첨부되어 있습니다.


콘솔 화면에 유효한 조건을 표시하고 컴파일을 종료합니다. 'ptr3' 포인터에는 'ptr4' 포인터 포인팅 값보다 작거나 같은 값이 포함되어 있습니다.

시나리오 4: 포인터 연산으로 홀수 표시

여기서는 정수 배열에 메모리를 동적으로 할당하는 방법을 살펴보겠습니다. 이 사례와 관련된 코드 조각은 다음과 같습니다.

#include
정수 메인 ( ) {
정수 숫자 [ ] = { 1 , 12 , 33 , 24 , 열 다섯 , 776 , 71 , 18 , 29 , 오십 } ;
정수 * ptrr = 숫자;
표준::cout << '배열의 홀수: ' ;
~을 위한 ( 정수 나는 = 0 ; 나 < 10 ; ++나는 ) {
만약에 ( * ptrr % 2 ! = 0 ) {
표준::cout << * ptrr << ' ' ;
}
ptrr++;
}
표준::cout << 표준::endl;
반품 0 ;
}


메인 함수에서는 10개의 요소를 포함하는 배열을 사용합니다. 배열의 홀수를 확인하려면 배열의 모든 요소를 ​​가리키는 포인터가 필요합니다. 'for' 루프에서는 배열의 현재 요소를 나누어 홀수를 확인합니다. 포인터 카운터는 배열의 한 요소를 확인한 후 증가됩니다.

코드를 실행하면 다음과 같은 콘솔 화면에 출력이 표시됩니다.


이렇게 하면 콘솔 화면에 포인터 연산을 사용하여 홀수를 표시할 수 있습니다.

결론

여기서 우리는 포인터 산술이 C++에서 다양한 작업을 수행하는 가장 효과적인 도구라는 결론을 내렸습니다. 포인터가 동일한 데이터 유형을 가진 배열의 값을 증가시키거나 감소시키는지 확인하십시오. C++ 프로그래밍 언어의 포인터 연산을 사용하여 메모리 주소를 기준으로 배열 값을 비교할 수 있습니다. 포인터 연산을 통해 배열을 순회하고 메모리를 쉽게 관리할 수 있습니다.