산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Industrial programming >> C 언어

예제가 있는 C++ 포인터

포인터란 무엇입니까?

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

포인터를 메모리 주소의 상징적 표현으로 봐야 합니다. 포인터를 사용하여 프로그램은 참조에 의한 호출을 시뮬레이션할 수 있습니다. 또한 동적 데이터 구조를 만들고 조작할 수 있습니다. C++에서 포인터 변수는 다른 변수가 가리키는 메모리의 특정 주소를 가리키는 변수를 의미합니다.

이 C++ 자습서에서는 다음을 배우게 됩니다.

C++의 주소

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

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

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

예를 들어, x가 변수이면 &x는 변수의 주소를 반환합니다.

포인터 선언 구문

C++의 선언은 다음 구문을 사용합니다.

datatype *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. ip에 arr을 할당합니다. ip와 arr은 동등해집니다.
  4. for 루프를 만듭니다. 루프 변수 x는 인덱스 0에서 5까지 배열 요소를 반복하기 위해 생성되었습니다.
  5. 포인터 IP의 주소에 저장된 값을 인쇄합니다. 반복당 하나의 값이 반환되며 총 6회 반복됩니다. endl은 끝줄을 의미하는 C++ 키워드입니다. 이 작업을 사용하면 각 값이 인쇄된 후 커서를 다음 줄로 이동할 수 있습니다. 각 값은 개별 행에 인쇄됩니다.
  6. 모든 반복 후에 포인터를 다음 int 위치로 이동합니다.
  7. for 루프의 끝입니다.
  8. 프로그램은 성공적으로 실행되면 무언가를 반환해야 합니다.
  9. main() 함수 본문의 끝입니다.

NULL 포인터

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

예시 3:

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

출력:

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

코드 설명:

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

변수 포인터

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

메모리 공간은 원하는 대로 할당하거나 다시 할당할 수 있습니다. 이것은 포인터 변수에 의해 가능합니다.

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

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

int *p;

또는,

int* p;

you 예제에서 포인터 변수 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. 값이 30인 포인터 변수 p와 변수 x를 선언합니다.
  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. 다른 텍스트와 함께 콘솔에 변수 값을 인쇄합니다. endl(끝줄)은 커서를 이동하여 다음 줄에서 인쇄를 시작합니다.
  6. 다른 텍스트와 함께 콘솔에 변수 b의 값을 인쇄합니다. endl(끝줄)은 커서를 이동하여 다음 줄에서 인쇄를 시작합니다.
  7. 변수 a와 b의 주소를 매개변수로 사용하는 test()라는 함수를 만듭니다.
  8. 콘솔에 일부 텍스트를 인쇄합니다. \n은 텍스트가 인쇄되기 전에 새 빈 줄을 만듭니다. endl(끝줄)은 커서를 이동하여 텍스트가 인쇄된 후 다음 줄에서 인쇄를 시작합니다.
  9. 다른 텍스트와 함께 콘솔에 변수 값을 인쇄합니다. endl(끝줄)은 커서를 이동하여 다음 줄에서 인쇄를 시작합니다.
  10. 다른 텍스트와 함께 콘솔에 변수 b의 값을 인쇄합니다. endl(끝줄)은 커서를 이동하여 다음 줄에서 인쇄를 시작합니다.
  11. 프로그램은 성공적으로 완료되면 값을 반환해야 합니다.
  12. main() 함수 본문의 끝입니다.
  13. test() 함수 정의. 함수는 두 개의 정수 포인터 변수 *n1 및 *n2를 취해야 합니다.
  14. 포인터 변수 *n1에 값 10 할당
  15. 포인터 변수 *n2에 값 11 할당
  16. test() 함수 본문의 끝입니다.

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

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

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

포인터 사용의 장점

다음은 포인터 사용의 장점/장점입니다.

요약:


C 언어

  1. C++의 배열 | 선언 | 초기화 | 배열 예제에 대한 포인터
  2. C++ do… while 루프 예제
  3. 예제가 있는 C++ 포인터
  4. C++ Char 데이터 유형(예제 포함)
  5. 예제를 사용한 C++ 연산자 오버로딩
  6. 예제가 있는 C++ 구조체
  7. 예제가 있는 C++의 std::list
  8. 프로그램 예제가 있는 C++ 함수
  9. 예제가 있는 C# 컬렉션 자습서
  10. C의 포인터:C 프로그래밍의 포인터란 무엇입니까? 유형