Company
교육 철학

LV13 포인터의 활용(배열, 함수)

포인터 변수의 활용( 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 등 입사에 성공했습니다.
프리미엄 코칭 안내 바로가기
또는 카톡 오픈채팅: 얌얌코딩 상담방
지금도 코딩을 ‘따라 치기만’ 하고 계신가요?
이젠 혼자 설계하고, 스스로 코딩하는 법을 배워야 할 때입니다.
얌얌코딩이 옆에서 함께하겠습니다.