C++ 예제가 포함된 포인터

포인터란 무엇입니까?

In C++에서 포인터는 다른 변수의 주소를 보유하는 변수를 나타냅니다. 일반 변수와 마찬가지로 포인터에도 데이터 유형이 있습니다. 예를 들어, 정수 유형의 포인터는 정수 유형의 변수 주소를 보유할 수 있습니다. 문자 유형의 포인터는 문자 유형의 변수 주소를 보유할 수 있습니다.

포인터는 메모리 주소를 상징적으로 표현한 것으로 보아야 합니다. 포인터를 사용하면 프로그램에서 참조별 호출을 시뮬레이션할 수 있습니다. 또한 동적 데이터 구조를 생성하고 조작할 수도 있습니다. ~ 안에 C++에서 포인터 변수는 다른 변수가 가리키는 메모리의 특정 주소를 가리키는 변수를 말한다.

주소 C++

이해하다 C++ 포인터를 사용하려면 컴퓨터가 데이터를 저장하는 방법을 이해해야 합니다.

당신이 변수를 만들 때 C++ 프로그램에는 컴퓨터 메모리에 일부 공간이 할당됩니다. 이 변수의 값은 할당된 위치에 저장됩니다.

데이터가 저장된 컴퓨터 메모리의 위치를 ​​확인하려면 C++ 제공 & (참조) 연산자. 연산자는 변수가 차지하는 주소를 반환합니다.

예를 들어 x가 변수인 경우 &x는 변수의 주소를 반환합니다.

포인터 선언 구문

선언 C++ 다음 구문을 사용합니다:

datatype *variable_name; 
  • 데이터 유형은 유효한 포인터의 기본 유형입니다. C++ 데이터 형식.
  • Variable_name은 포인터 변수의 이름이어야 합니다.
  • 포인터 선언에 위에서 사용된 별표는 곱셈 연산을 수행하는 데 사용된 별표와 유사합니다. 변수를 포인터로 표시하는 것은 별표입니다.

다음은 유효한 포인터 선언의 예입니다. C++:

int    *x;    // a pointer to integer
double *x;    // a pointer to double
float  *x;    // a pointer to float
char   *ch     // a pointer to a character

참조 연산자(&)와 참조 연산자(*)

참조 연산자(&)는 변수의 주소를 반환합니다.

역참조 연산자(*)는 메모리 주소에 저장된 값을 얻는 데 도움이 됩니다.

예 :

num이라는 이름의 변수가 있으면 주소 0x234에 저장되고 값 28이 저장됩니다.

참조 연산자(&)는 0x234를 반환합니다.

역참조 연산자(*)는 5를 반환합니다.

예 1 :

#include <iostream>
using namespace std;
int main() {
	int  x = 27;  
	int  *ip;        
	ip = &x;       
	cout << "Value of x is : ";
	cout << x << endl;
	cout << "Value of ip is : ";
	cout << ip<< endl;
	cout << "Value of *ip is : ";
	cout << *ip << endl;
	return 0;
}

출력:

참조 연산자(&)와 참조 연산자(*)

작동 원리 :

참조 연산자(&)와 참조 연산자(*)

다음은 코드의 스크린샷입니다.

참조 연산자(&)와 참조 연산자(*)

코드 설명 :

  1. iostream 헤더 파일을 가져옵니다. 이렇게 하면 헤더 파일에 정의된 함수를 오류 없이 사용할 수 있습니다.
  2. 클래스를 호출하지 않고 사용하려면 std 네임스페이스를 포함하세요.
  3. main() 함수를 호출합니다. 프로그램 로직은 이 함수의 본문 내에 추가되어야 합니다. {는 함수 본문의 시작을 표시합니다.
  4. 정수 변수 x를 선언하고 값 27을 할당합니다.
  5. 포인터 변수 *ip를 선언합니다.
  6. 변수 x의 주소를 포인터 변수에 저장합니다.
  7. 콘솔에 일부 텍스트를 인쇄합니다.
  8. 변수 x의 값을 화면에 인쇄합니다.
  9. 콘솔에 일부 텍스트를 인쇄합니다.
  10. 변수 x의 주소를 출력합니다. 주소 값은 변수 ip에 저장되었습니다.
  11. 콘솔에 일부 텍스트를 인쇄합니다.
  12. 포인터의 주소에 저장된 값을 인쇄합니다.
  13. 프로그램은 성공적으로 실행되면 값을 반환해야 합니다.
  14. main() 함수 본문의 끝입니다.

포인터와 배열

배열과 포인터는 관련 개념을 기반으로 작동합니다. 포인터가 있는 배열로 작업할 때 주의해야 할 사항이 여러 가지 있습니다. 배열 이름 자체는 배열의 기본 주소를 나타냅니다. 즉, 배열의 주소를 포인터에 할당하려면 앰퍼샌드(&)를 사용하면 안 됩니다.

예 :

p = arr;

arr은 배열의 주소를 나타내기 때문에 위의 내용은 정확합니다. 또 다른 예는 다음과 같습니다.

p = &arr;

위의 내용은 올바르지 않습니다.

암시적으로 배열을 포인터로 변환할 수 있습니다. 예를 들어:

int arr [20];
int * ip;

유효한 작업은 다음과 같습니다.

ip = arr;

위 선언 이후 ip와 arr은 동일하며 속성을 공유합니다. 하지만 ip에는 다른 주소를 할당할 수 있지만 arr에는 아무 것도 할당할 수 없습니다.

예 2 :

이 예에서는 포인터를 사용하여 배열을 탐색하는 방법을 보여줍니다.

#include <iostream>
using namespace std;
int main() {
	int *ip;
	int arr[] = { 10, 34, 13, 76, 5, 46 };
	ip = arr;
	for (int x = 0; x < 6; x++) {
		cout << *ip << endl;
		ip++;
	}
	return 0;
}

출력:

포인터와 배열

다음은 코드의 스크린샷입니다.

포인터와 배열

코드 설명 :

  1. 정수 포인터 변수 ip를 선언합니다.
  2. arr이라는 배열을 선언하고 6개의 정수를 저장합니다.
  3. arr을 ip에 할당합니다. ip와 arr은 동일해집니다.
  4. for 루프를 만듭니다. 루프 변수 x는 인덱스 0에서 5까지 배열 요소를 반복하기 위해 생성되었습니다.
  5. 포인터 IP의 주소에 저장된 값을 출력합니다. 반복당 하나의 값이 반환되며 총 6번의 반복이 수행됩니다. 엔드는 C++ 끝줄을 뜻하는 키워드. 이 작업을 사용하면 각 값이 인쇄된 후 커서를 다음 줄로 이동할 수 있습니다. 각 값은 개별 라인에 인쇄됩니다.
  6. 매 반복 후에 포인터를 다음 int 위치로 이동합니다.
  7. for 루프의 끝입니다.
  8. 프로그램은 성공적으로 실행되면 무언가를 반환해야 합니다.
  9. main() 함수 본문의 끝입니다.

NULL 포인터

할당할 정확한 주소가 없으면 포인터 변수에 NULL을 할당할 수 있습니다. 선언하는 동안 수행되어야 합니다. 이러한 포인터를 널 포인터라고 합니다. 그 값은 XNUMX이며 iostream과 같은 많은 표준 라이브러리에 정의되어 있습니다.

예 3 :

#include <iostream>
using namespace std;
int main() {
	int  *ip = NULL;
	cout << "Value of ip is: " << ip;
	return 0;
}

출력:

NULL 포인터

다음은 코드의 스크린샷입니다.

NULL 포인터

코드 설명 :

  1. 포인터 변수 ip를 선언하고 NULL 값을 할당합니다.
  2. 콘솔의 일부 텍스트와 함께 포인터 변수 ip의 값을 인쇄합니다.
  3. 프로그램은 성공적으로 완료되면 값을 반환해야 합니다.
  4. main() 함수 본문의 끝입니다.

변수 포인터

와 C++, 컴퓨터 메모리에서 직접 데이터를 조작할 수 있습니다.

메모리 공간은 원하는 대로 할당되거나 재할당될 수 있습니다. 이는 포인터 변수를 통해 가능해졌습니다.

포인터 변수는 다른 변수가 가리키는 컴퓨터 메모리의 특정 주소를 가리킵니다.

다음과 같이 선언할 수 있습니다.

int *p;

또는,

int* p;

예제에서는 포인터 변수 p를 선언했습니다.

메모리 주소를 보유하게 됩니다.

별표는 포인터를 의미하는 역참조 연산자입니다.

포인터 p는 메모리 주소의 정수 값을 가리키고 있습니다.

예 4 :

#include <iostream>

using namespace std;
int main() {
	int *p, x = 30;
	p = &x;
	cout << "Value of x is: " << *p;
	return 0;
}

출력:

변수 포인터

다음은 코드의 스크린샷입니다.

변수 포인터

코드 설명 :

  1. 포인터 변수 p와 변수 x를 값 30으로 선언합니다.
  2. 변수 x의 주소를 p에 할당합니다.
  3. 콘솔의 일부 텍스트와 함께 포인터 변수 p의 값을 인쇄합니다.
  4. 프로그램은 성공적으로 완료되면 값을 반환해야 합니다.
  5. main() 함수 본문의 끝입니다.

포인터의 적용

기능 C++ 하나의 값만 반환할 수 있습니다. 또한 함수에서 선언된 모든 변수는 함수 호출 스택에 할당됩니다. 함수가 반환하자마자 모든 스택 변수가 파괴됩니다.

함수에 대한 인수는 값으로 전달되고 변수에 대한 수정은 전달되는 실제 변수의 값을 변경하지 않습니다. 다음 예는 이 개념을 설명하는 데 도움이 됩니다.

예 5 :

#include <iostream>

using namespace std;
void test(int*, int*);
int main() {
	int a = 5, b = 5;
	cout << "Before changing:" << endl;
	cout << "a = " << a << endl;
	cout << "b = " << b << endl;

	test(&a, &b);

	cout << "\nAfter changing" << endl;
	cout << "a = " << a << endl;
	cout << "b = " << b << endl;
	return 0;
}

void test(int* n1, int* n2) {
	*n1 = 10;
	*n2 = 11;
}

출력:

포인터의 적용

다음은 코드의 스크린샷입니다.

포인터의 적용

코드 설명 :

  1. 두 개의 정수 매개변수를 사용하는 test라는 함수의 프로토타입을 만듭니다.
  2. main() 함수를 호출합니다. 본문 내부에 프로그램 논리를 추가하겠습니다.
  3. 각각 값이 5인 두 개의 정수 변수 a와 b를 선언합니다.
  4. 콘솔에 일부 텍스트를 인쇄합니다. endl(끝 라인)은 커서를 이동하여 다음 라인에서 인쇄를 시작합니다.
  5. 다른 텍스트와 함께 콘솔에 변수 a의 값을 인쇄합니다. endl(끝 라인)은 커서를 이동하여 다음 라인에서 인쇄를 시작합니다.
  6. 다른 텍스트와 함께 콘솔에 변수 b의 값을 인쇄합니다. endl(끝 라인)은 커서를 이동하여 다음 라인에서 인쇄를 시작합니다.
  7. 변수 a와 b의 주소를 매개변수로 사용하는 test()라는 함수를 만듭니다.
  8. 콘솔에 일부 텍스트를 인쇄합니다. \n은 텍스트가 인쇄되기 전에 새로운 빈 줄을 만듭니다. endl(끝 줄)은 텍스트가 인쇄된 후 다음 줄에서 인쇄를 시작하도록 커서를 이동합니다.
  9. 다른 텍스트와 함께 콘솔에 변수 a의 값을 인쇄합니다. endl(끝 라인)은 커서를 이동하여 다음 라인에서 인쇄를 시작합니다.
  10. 다른 텍스트와 함께 콘솔에 변수 b의 값을 인쇄합니다. endl(끝 라인)은 커서를 이동하여 다음 라인에서 인쇄를 시작합니다.
  11. 프로그램은 성공적으로 완료되면 값을 반환해야 합니다.
  12. main() 함수 본문의 끝입니다.
  13. test() 함수를 정의합니다. 함수는 두 개의 정수 포인터 변수 *n1과 *n2를 사용해야 합니다.
  14. 포인터 변수 *n1에 값 10을 할당합니다.
  15. 포인터 변수 *n2에 값 11을 할당합니다.
  16. test() 함수 본문의 끝입니다.

함수 테스트 내부에서는 변수 a, b에 새로운 값을 할당하더라도 함수 호출이 완료되면 외부 함수 main에는 반영되지 않습니다.

포인터를 함수 인수로 사용하면 변수의 실제 주소를 함수에 전달하는 데 도움이 되며 변수에 수행된 모든 변경 사항은 외부 함수에 반영됩니다.

위의 경우 'test' 함수는 변수 'a'와 'b'의 주소를 가지고 있습니다. 이 두 변수는 'test' 함수에서 직접 액세스할 수 있으므로 이러한 변수에 대한 모든 변경 사항은 호출자 함수 'main'에 반영됩니다.

포인터 사용의 장점

포인터 사용의 장점/이점은 다음과 같습니다.

  • 포인터는 다른 포인터의 주소를 저장하는 변수입니다. 변수 C++.
  • 포인터를 사용하여 함수에서 둘 이상의 변수를 수정하고 반환할 수 있습니다.
  • 포인터를 사용하여 메모리를 동적으로 할당하고 할당 해제할 수 있습니다.
  • 포인터는 프로그램의 복잡성을 단순화하는 데 도움이 됩니다.
  • 포인터를 사용하면 프로그램의 실행 속도가 향상됩니다.

제품 개요

  • 포인터는 다른 변수의 주소를 보유하는 변수를 나타냅니다.
  • 각 포인터에는 유효한 데이터 유형이 있습니다.
  • 포인터는 메모리 주소를 상징적으로 표현한 것입니다.
  • 포인터를 사용하면 프로그램이 참조별 호출을 시뮬레이션하고 동적 데이터 구조를 생성 및 조작할 수 있습니다.
  • 배열 포인터는 관련 개념을 사용합니다.
  • 배열 이름은 배열의 기본을 나타냅니다.
  • 배열의 주소를 포인터에 할당하려면 앰퍼샌드(&)를 사용하지 마세요.
  • 포인터 변수를 할당할 특정 주소가 없으면 NULL을 할당합니다.