[C++]C++문법 포인터공부하기
본문 바로가기

C#

[C++]C++문법 포인터공부하기

728x90
반응형

오늘 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++포인터 공부 포스팅을 마치겠습니다.

반응형