포인터 변수의 활용( return 값 두개이상 받기 )
#include <iostream>
int Increase(int a)
{
return a + 1;
}
void Increase(int* a, int* b)
{
*a += 1;
*b += 1;
}
void Insert(int* a, int* b)
{
*a = 100;
*b = 100;
}
int main()
{
int num1 = 10;
int num2 = 20;
num1 = Increase(num1);
num2 = Increase(num2);
Increase(&num1, &num2);
return 0;
}
C++
복사
배열을 인자로 함수에 넘기기
배열도 결국 다수의 int 변수의 나열이기 때문에 모든 변수의 주소를 보낼 필요가 없고
시작 주소 하나만 보내면된다. 즉 int arr[0]의 주소만 보내면 된다. 결국 int변수 주소를 보내는 샘과 같다.
여기서 특징은 주소값에 덧셈을 하면 실제 사칙연산이 아니라 포인터 변수의 주소 자료형의 데이터 크기만큼 증가해서 배열처럼 사용이 가능하다.
#include <iostream>
void bbq(int* pArr /*int pArr[10]*/)
{
*(pArr) = 100; //pArr[0]
*(pArr + 1) = 100; // pArr[1]
*(pArr + 2) = 100; // pArr[2]
*(pArr + 3) = 100;
*(pArr + 4) = 100;
*(pArr + 5) = 100;
*(pArr + 6) = 100;
*(pArr + 7) = 100;
*(pArr + 8) = 100;
*(pArr + 9) = 100; // pArr[9]
pArr[0] = 200;
pArr[1] = 200;
pArr[2] = 200;
pArr[3] = 200;
pArr[4] = 200;
pArr[5] = 200;
pArr[6] = 200;
pArr[7] = 200;
pArr[8] = 200;
pArr[9] = 200;
}
int main()
{
int vect[10] = {};
// 배열의 이름이 해당 배열의 첫번째 변수의 주소와 같다.
// 그말인즉슨 배열이름은 곧 배열의 시작주소이다.
bbq(/*&vect[0]*/ vect);
return 0;
}
JavaScript
복사
포인터 변수를 활용하는 제일 큰 이유는 배열 전체를 복사해서 전달인자로 넘기면 배열의 크기만큼의 변수가 복사를 해야하지만 배열의 주소만 보내면 8바이트(64bit) 만 복사하면 끝난다.
다만 *(pArr + 1) 이런 방식으로 사용하면 상당히 코드를 작성하는데 불편하다.
그래서 문법상 포인터변수는 배열처럼 바로 사용이 가능하다.
다만 주의해야 할 점이 전달된 배열의 크기를 넘어가지 않게 주의해서 사용해야 한다.
배열에 이름은 해당 배열의 시작 주소이다. 그래서 이름을 전달인자로 넘겼을시에 복사가 되는것이 아니라 원본이 그대로 넘어간다. (주의해야한다)
#include <iostream>
void Increase(int pArr[7])
{
for (int i = 0; i < 7; i++)
{
pArr[i]++;
}
}
int main()
{
int arr[7] = { 123, 42, 2, 66, 7, 9, 10 };
Increase(arr);
return 0;
}
C++
복사
그래서 조사식에서 배열에 이름을 넣으면 값에 주소가 보여진다.
2차원 배열을 포인터 변수로 전달해야할 때는 문법이 약간 다르다.
#include <iostream>
void kfc2D(int (*pArr2D)[3]/*int pArr2D[3][3]*/)
{
pArr2D[0][0] = 100;
pArr2D[0][1] = 100;
pArr2D[0][2] = 100;
pArr2D[1][0] = 100;
pArr2D[1][1] = 100;
pArr2D[1][2] = 100;
pArr2D[2][0] = 100;
pArr2D[2][1] = 100;
pArr2D[2][2] = 100;
}
void kfc(int* pArr /*int pArr[3]*/)
{
pArr[0] = 100;
pArr[1] = 100;
pArr[2] = 100;
}
int main()
{
int arr[3][3] = {};
//int** pArr2D = arr; 틀리다.
int(*pArr2D)[3] = arr; //이렇게 해야한다.
// 보통은 1차원배열로 여러번 나누어서 2차원배열을 사용한다.
// 그러한 가장 큰 이유는 가독성 ( 하나의 함수는 하나의 일만 하도록 만들어야 한다. )
kfc2D(arr);
kfc(arr[0]);
kfc(arr[1]);
kfc(arr[2]);
return 0;
}
JavaScript
복사
최대값 최소값 찾기
#include <iostream>
int main()
{
int vect[10] = { 1,2,3,4,5,6,7,8,9,10 };
int max = INT_MIN;
int min = INT_MAX;
int maxIdx = -1;
int minIdx = -1;
for (int i = 0; i < 10; i++)
{
if (max < vect[i])
{
max = vect[i];
maxIdx = i;
}
if (min > vect[i])
{
min = vect[i];
minIdx = i;
}
}
return 0;
}
JavaScript
복사
2차원 배열에서 최소,최대값 위치 기억하기
#include <iostream>
int main()
{
int vect[3][3] =
{
3, 4, 1,
5, 5, 7,
8, 3, 2,
};
int min = 987654321;
int dy = 0;
int dx = 0;
for (int y = 0; y < 3; y++)
{
for (int x = 0; x < 3; x++)
{
if (vect[y][x] < min)
{
min = vect[y][x];
dy = y;
dx = x;
}
}
}
return 0;
}
C++
복사
“강의는 많은데, 내 실력은 왜 그대로일까?”
혼자서 공부하다 보면
이런 생각 들지 않으셨나요?
•
강의는 다 듣고도 직접 코드는 못 짜겠고,
•
복습할 땐 어디서부터 다시 시작해야 할지 막막하고,
•
질문하려 해도 물어볼 사람이 없고,
•
유튜브 영상도 정답만 보고 따라 치는 느낌…
그렇다면 지금이 바로
“나만을 위한 코칭”이 필요한 순간입니다.
당신도 할 수 있습니다.
지금 멤버십을 넘어, 코칭에 도전해보세요.
수많은 수강생들이 얌얌코딩 코칭으로 넥슨, 크래프톤, NC 등 입사에 성공했습니다.
지금도 코딩을 ‘따라 치기만’ 하고 계신가요?
이젠 혼자 설계하고, 스스로 코딩하는 법을 배워야 할 때입니다.
얌얌코딩이 옆에서 함께하겠습니다. 