오늘 C++포인터에 대해 공부했습니다.
책은 C++하이킹을 참조하여 공부했습니다.
포인터는 컴퓨터의 메모리번지(변수의 주소)로, 데이터가 어디에 저장되어 있는지 알려줍니다.
C++은 이 포인터를 직접 사용할 수 있도록 포인터연산자(&)를 제공합니다.
포인터연산자& 기본형식
&일반변수명
포인터연산자*기본형식
*포인터변수명
의미
& : 변수의 주소를 추출
* : 포인터가 가리키는 메모리 주소에 있는 값을 추출
변수의 주소값 출력하기
#include<iostream>
using namespace std;
void main() {
int a = 10;
cout << "변수 a의 저장된 값 : " << a << endl;
cout << "변수 a의 주소 : " << &a << endl;
cout << "변수 a에 저장된 값 : " << *&a << endl;
}
결과

포인터 변수 기본형식
자료형 *포인터변수명
포인터변수는 주소만을 저장한다.
ex) int *p
p=a 라고하면 오류가발생 -> 주소값만 받기때문에
p=&a로 대입해야함
포인터 변수의 선언과 주소값 대입하기
#include<iostream>
using namespace std;
void main() {
int a = 10;
int* p;
p = &a;
cout << "a => " << a << endl; //값
cout << "&a => " << &a << endl; //주소
cout << "p => " << p << endl; //주소
cout << "*p => " << *p << endl; //값
}

포인터 변수의 초기화와 포인터로 간접 참조해서 값 설정하기
#include<iostream>
using namespace std;
void main() {
int a = 10, b = 20;
int* p = &a;
cout << "a => " << a << "b => " << b << endl;
cout << "*p => " << *p << endl;
b = *p;
cout << "a => " << a << "b => " << b << endl;
cout << "*p => " << *p << endl;
*p = 30;
cout << "a => " << a << "b => " << b << endl;
cout << "*p => " << *p << endl;
}

값에 의한 전달방식의 함수 익히기
#include<iostream>
using namespace std;
int add(int x, int y);
void main() {
int a = 10, b = 20,sum;
sum = add(a, b);
cout << "sun= " << sum << endl;
}
int add(int x, int y) {
int z;
z = x + y;
return(z);
}

절댓값을 구하는 함수를 통해 값에 의한 전달 방식익히기
#include<iostream>
using namespace std;
int abs(int a);
void main() {
int a = -10;
cout << "main에서 함수 호출 전 a 값 : " << a << endl;
cout << "abs함수에서의 a의 값 : " << abs(a) << endl;
cout << "main에서 함수 호출 후 a의 값 : " << a << endl;
}
int abs(int a) {
if (a < 0)
a = -a;
return a;
}

-> main함수 측에서 언된 변수 a와 abs함수 측에서 선언한 형식 매개변수 a 는 서로 독립된 기억공간을 할당받기 때문에 값이 다르게 나온다
주소에 의한 전달방식
두 변수에 저장된 값 교환하기
#include<iostream>
using namespace std;
void main() {
int a = 10, b = 20;
cout << "a=>" << a << "b=>" << b << endl;
int t;
t = a;
a = b;
b = t;
cout << "a=>" << a << "b=>" << b << endl;
}
결과

값에 의한 전달 방식으로 두 변숫값을 교환하는 함수 작성하기
#include<iostream>
using namespace std;
void swap(int a, int b);
void main() {
int a = 10, b = 20;
cout << "a=>" << a << "b=>" << b << endl;
swap(a, b);
cout << "a=>" << a << "b=>" << b << endl;
}
void swap(int a, int b) {
int t;
t = a;
a = b;
b = t;
}
결과

값이 바뀌지 않았다. main함수에 선언한 변수를 swap함수에서 직접 참조하지 못했기 때문이다.
주소에 의한 전달 방식으로 부 변숫값을 교환하는 함수 작성하기.
#include<iostream>
using namespace std;
void swap(int *a, int *b);
void main() {
int a = 10, b = 20;
cout << "a=>" << a << "b=>" << b << endl;
swap(&a, &b); //주소값으로 들어가야함
cout << "a=>" << a << "b=>" << b << endl;
}
void swap(int *a, int *b) {
int t;
t = *a;
*a = *b;
*b = t;
}
결과

주소값으로 swap함수를 호출하면 값이 변경된다.
참조에 의한 전달방식
참조 변수 선언 기본 형식
자료형 &별칭으로 사용할 변수명 = 앞서 선언된 변수명
참조 변수를 선언할 때는 주의할 점은 반드시 변수 선언시 초깃값을 주어야한다.
참조 변수 선언하기
#include<iostream>
using namespace std;
void main() {
int a = 10;
int& b = a;
cout << "a= " << a << "b= " << b << endl;
b += 300;
cout << "a= " << a << "b= " << b << endl;
}
결과

참조에 의한 전달 방식으로 두 변숫값을 교환하는 함수 작성하기
#include<iostream>
using namespace std;
void swap(int& x, int& y);
void main() {
int a = 10, b = 20;
cout << "a= " << a << "b= " << b << endl;
swap(a, b);
cout << "a= " << a << "b= " << b << endl;
}
void swap(int& x, int& y) {
int t;
t = x;
x = y;
y = t;
}

이상으로 C++포인터 공부 포스팅을 마치겠습니다.
'C#' 카테고리의 다른 글
| C++ 오류 =': 'const char'에서 'char *'(으)로 변환할 수 없습니다. 해결방법 (0) | 2026.02.03 |
|---|---|
| [C++]C++문법 1차원배열 / 2차원배열 공부하기 (0) | 2026.02.01 |
| [C++]C++ 함수 , 기억클래스와 변수 공부하기 (0) | 2026.01.25 |
| [C++]C++문법 공부(while문/do-while문/break문/continue문/goto문/무한루프) (0) | 2026.01.23 |
| [C++]C++문법공부 제어문-선택문(if/if-else-/switch)반복문(for문/다중for문) -1 (2) | 2026.01.20 |