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

C++ 포인터 이해하기: 실전 가이드

C++ 포인터

이 튜토리얼은 C++ 포인터의 작동 원리와 실전 예제로 이 필수 언어 기능을 마스터하도록 돕습니다.

C++에서 포인터는 다른 변수의 메모리 주소를 저장하는 변수입니다. 포인터는 직접 메모리 조작, 동적 할당, 효율적 데이터 처리를 가능케 합니다.

C++에서 주소

변수 var가 주어지면 &var 표현식이 메모리 내 주소를 반환합니다. 예:

예제 1: C++에서 변수 주소 출력하기

#include <iostream> using namespace std; int main() { // 변수 선언 int var1 = 3; int var2 = 24; int var3 = 17; // var1 주소 출력 cout << "Address of var1: " << &var1 << endl; // var2 주소 출력 cout << "Address of var2: " << &var2 << endl; // var3 주소 출력 cout << "Address of var3: " << &var3 << endl; }

출력

Address of var1: 0x7fff5fbff8ac Address of var2: 0x7fff5fbff8a8 Address of var3: 0x7fff5fbff8a4

주소는 16진수 형식으로 표시됩니다. 연속된 주소 간 4바이트 차이는 64비트 시스템에서 int 크기가 4바이트임을 반영합니다.

참고: 정확한 주소는 프로그램 실행마다 달라질 수 있습니다.


C++ 포인터

보았듯 포인터는 직접 값이 아닌 주소를 저장합니다. 포인터 선언은 간단합니다:

int *pointVar;

여기서 pointVar는 int 타입 포인터입니다. 선호 문법은 별표를 타입 옆에 둡니다:

int* pointVar; // 선호 문법

다중 선언도 가능:

int* pointVar, p;

이 줄에서 pointVar는 포인터, p는 일반 int입니다. 별표는 타입이 아닌 변수 이름과 결합됩니다.

팁: * 연산자는 포인터 선언용이며 곱셈 수행용이 아닙니다.


포인터에 주소 할당하기

포인터를 변수 주소에 바인딩하려면 주소 연산자 & 사용:

int* pointVar, var; var = 5; // var 주소를 pointVar 포인터에 할당 pointVar = &var;

이제 pointVar가 var의 메모리 주소를 가집니다.


포인터로 주소의 값 가져오기

역참조 연산자 *는 포인터가 가리키는 주소에 저장된 값을 가져옵니다:

int* pointVar, var; var = 5; pointVar = &var; cout << *pointVar << endl; // 출력: 5

여기서 *pointVar는 var의 값(5)을 산출. 이 연산자를 역참조 연산자(dereference operator)라 부릅니다.

참고: C++에서 pointVar(포인터)와 *pointVar(가리키는 값)는 별개 개체입니다.


예제 2: C++ 포인터 작동

#include <iostream> using namespace std; int main() { int var = 5; // 포인터 변수 선언 int* pointVar; // var 주소 저장 pointVar = &var; // var 값 출력 cout << "var = " << var << endl; // var 주소 출력 cout << "Address of var (&var) = " << &var << endl << endl; // 포인터 pointVar 출력 cout << "pointVar = " << pointVar << endl; // pointVar가 가리키는 주소 내용 출력 cout << "Content of the address pointed to by pointVar (*pointVar) = " << *pointVar << endl; return 0; }

출력

var = 5 Address of var (&var) = 0x61ff08 pointVar = 0x61ff08 Content of the address pointed to by pointVar (*pointVar) = 5

포인터가 가리키는 값 변경하기

pointVar가 var를 가리키면 *pointVar 수정으로 원본 변수 변경:

int var = 5; int* pointVar; pointVar = &var; *pointVar = 1; cout << var << endl; // 출력: 1

pointVar와 &var가 같은 주소 보유하므로 역참조 값 변경 시 var 업데이트.


예제 3: 포인터로 값 변경하기

#include <iostream> using namespace std; int main() { int var = 5; int* pointVar; // var 주소 저장 pointVar = &var; // var 출력 cout << "var = " << var << endl; // *pointVar 출력 cout << "*pointVar = " << *pointVar << endl << endl; cout << "var 값을 7로 변경:" << endl; // var 값을 7로 변경 var = 7; // var 출력 cout << "var = " << var << endl; // *pointVar 출력 cout << "*pointVar = " << *pointVar << endl << endl; cout << "*pointVar 값을 16으로 변경:" << endl; // var 값을 16으로 변경 *pointVar = 16; // var 출력 cout << "var = " << var << endl; // *pointVar 출력 cout << "*pointVar = " << *pointVar << endl; return 0; }

출력

var = 5 *pointVar = 5 var 값을 7로 변경: var = 7 *pointVar = 7 *pointVar 값을 16으로 변경: var = 16 *pointVar = 16

포인터 작업 시 흔한 실수

아래는 전형적 오류와 올바른 포인터 처리법:

int var, *varPoint; // 잘못! varPoint는 주소지만 var은 아님 varPoint = var; // 잘못! // &var은 주소 // *varPoint는 &var에 저장된 값 *varPoint = &var; // 올바름! // varPoint는 주소고 &var도 주소 varPoint = &var; // 올바름! // *varPoint와 var 둘 다 값 *varPoint = var;

추천 읽기:

C++ 포인터 이해하기: 실전 가이드

C 언어

  1. C++ 데이터 타입 이해하기: 기초, 수정자, 모범 사례
  2. C++ 연산자 마스터하기: 유형별 완벽 가이드와 실전 예제
  3. C++ 주석: 가독성 높고 유지보수하기 좋은 코드 작성법
  4. C++ 클래스 템플릿 마스터: 실전 가이드
  5. C 포인터 마스터하기: 실전 중심 전문가 가이드
  6. C++ 포인터 완전 정복: 개념, 예제, 실전 활용
  7. C 포인터 마스터: 기초부터 포인터 연산, 배열/함수 포인터, 동적 할당까지
  8. C++ 프로그래밍 언어: 개요와 핵심 특징
  9. C++ 상수와 리터럴 완전 정복: 타입, 문법, 모범 사례
  10. C++ 연산자 종합 가이드: 종류, 사용법, 우선순위