Company
교육 철학

LV10,11 포인터타입 변수

C++ Return문, 포인터, 배열 응용

Return 키워드

return문은 함수에서 값을 반환하고 함수를 종료하는 키워드입니다.
#include <iostream> #include <cpltasks.h> using namespace std; int Add(int a, int b) { return a + b; } int main() { int a = 5; int b = 6; int ret = Add(a, b); return 0; }
C++
복사
return문의 역할:
함수의 실행을 종료
함수 호출한 곳으로 값을 반환
main 함수에서 return 0은 프로그램이 정상 종료됨을 의미

숫자채우기 연습

번호 순서로 숫자를 배열에 채우기

x는 0 ~ 2까지, y는 0 ~ 2까지 반복하며 2차원 배열에 순차적으로 값을 저장합니다.
#include <iostream> using namespace std; int main() { int vect[3][3] = { 0 }; int x, y; int t = 1; for (y = 0; y < 3; y++) { for (x = 0; x < 3; x++) { vect[y][x] = t; t++; } } return 0; }
C++
복사
결과:
1 2 3 4 5 6 7 8 9
Plain Text
복사

역순으로 숫자 채우기

y방향이 바깥에 움직이고, x방향이 안쪽에 움직입니다. x는 2부터 0까지 움직이고, y는 0부터 2까지 움직입니다.
#include <iostream> using namespace std; int main() { int vect[3][3] = { 0 }; int x, y; int t = 1; for (x = 2; x >= 0; x--) { for (y = 0; y < 3; y++) { vect[y][x] = t; t++; } } return 0; }
C++
복사
결과:
7 4 1 8 5 2 9 6 3
Plain Text
복사

포인터 타입 변수

포인터의 기본 개념

메모리에 위치를 가리키는(주소값) 을 저장할 수 있는 변수입니다.
포인터의 특징:
포인터 변수: 자료형 뒤에 을 붙여서 사용합니다. (int p)
변수의 주소값을 알고 싶으면 해당 변수 앞에 &(주소 연산자)를 붙여주면 됩니다.
주소값은 일반적인 정수(값) 10진수와 구분하기 위해 16진수를 사용합니다.

기본적인 사용과 16진수의 주소값

#include <iostream> using namespace std; int main() { int n = 10; void* ptr = &n; cout << ptr << endl; // 출력 예: 000000A32D9FC64 return 0; }
C++
복사

포인터와 메모리 구조

포인터 변수에는 해당 주소 위치로 접근할 수 있는 특별한 연산이 있습니다.
* 을 붙이면 해당 주소 위치로 이동할 수 있습니다.
하지만 중요한건 해당 주소로 이동했을시에 알맞은 크기만큼 접근하기 위해서 포인터 변수의 타입 앞 부분과 실제 변수의 자료형을 맞춰야 주의하여야 합니다.
다만 그냥 주소값을 저장하는 용도로 사용한다면 void*을 사용하여 됩니다.

변수의 자료형 일치

#include <iostream> using namespace std; int main() { int number = 0; // 주소값을 저장하는 용도로는 void* 사용 가능 void* p = &number; // *p = 200; // 오류! // 해당 주소로 이동했을 때 알맞은 크기만큼 접근하기 위해서 // 포인터 변수의 지료형과 실제 변수의 자료형을 맞춰야 한다. int* numberCopy = &number; *numberCopy = 100; char ch = 'A'; char* pCh = &ch; return 0; }
C++
복사

포인터를 이용한 값의 복사 (코드 분석해보기 숙제)

메모리 그림도 추가해주야 합니다.

값에 의한 복사 (Call by Value)

#include <iostream> using namespace std; // 값을 복사 void swap(int a, int b) { int temp = a; a = b; b = temp; }
C++
복사

주소에 의한 복사 (Call by Reference)

#include <iostream> using namespace std; // 값을 복사 void swap(int* a, int* b) { int temp = *a; *a = *b; *b = temp; } int main() { int num1 = 100; int num2 = 200; //swap(num1, num2); // 값 전달 - 원본 변경 안됨 swap(&num1, &num2); // 주소 전달 - 원본 변경됨 return 0; }
C++
복사
차이점:
Call by Value: 값을 복사하여 전달하므로 원본 변수는 변경되지 않음
Call by Reference: 주소를 전달하여 원본 변수를 직접 변경

플래그 코딩 기법

기본 플래그 사용법

Flag 변수를 하나만들고 활용하는 방식입니다. 배열에 어떤 값이 존재하는지 판단할 때 사용합니다.
#include <iostream> using namespace std; int main() { int vect[7] = { 5, 6, 7, 1, 2, 7, 8 }; int flag = 0; for (int i = 0; i < 7; i++) { if (vect[i] == 7) { flag = 1; break; } } if (flag == 1) { cout << "발견" << endl; } else { cout << "미발견" << endl; } return 0; }
C++
복사
플래그 기법의 장점:
조건을 만족하는 순간 반복을 중단할 수 있음 (break 사용)
결과를 나중에 한번에 처리 가능
코드의 가독성 향상

최대값, 최소값 찾기

#include <iostream> using namespace std; int main() { int vect[7] = { 5, 6, 7, 1, 2, 3, 8 }; // 최대값 찾기 int max = INT_MIN; // 가장 작은 정수값으로 초기화 for (int i = 0; i < 7; i++) { if (max < vect[i]) { max = vect[i]; } } // 최소값 찾기 int min = INT_MAX; // 가장 큰 정수값으로 초기화 for (int i = 0; i < 7; i++) { if (min > vect[i]) { min = vect[i]; } } cout << "최대값: " << max << endl; // 8 cout << "최소값: " << min << endl; // 1 return 0; }
C++
복사
최대값/최소값 찾기 알고리즘:
1.
초기값을 적절히 설정 (INT_MIN, INT_MAX 또는 배열의 첫 번째 원소)
2.
배열을 순회하면서 현재 최대값/최소값과 비교
3.
조건에 맞으면 값을 갱신

“강의는 많은데, 왜 나는 아직도 코드를 못 짤까?”

혼자 공부하다 보면 누구나 이런 고민을 하게 됩니다.
강의는 다 들었지만 막상 손이 안 움직이고,
복습을 하려 해도 무엇을 다시 봐야 할지 모르겠고,
질문할 곳도 없고,
유튜브는 결국 정답을 따라 치는 것밖에 안 되는 것 같고.
문제는 ‘연습’이 빠졌기 때문입니다.
단순히 강의를 듣는 것만으로는 실력이 늘지 않습니다.
실제 문제를 풀고, 고민하고, 직접 구현해보는 시간이 반드시 필요합니다.

그래서, 얌얌코딩 코칭은 다릅니다.

그냥 가르치지 않습니다.
스스로 설계하고, 코딩할 수 있게 만듭니다.
얌얌코딩 코칭에서는 단순한 예제가 아닌,
스스로 문제를 분석하고 구현해야 하는 연습문제를 제공합니다.
이 연습문제들은 다음과 같은 역량을 키우기 위해 설계되어 있습니다:
문제를 스스로 쪼개고 설계하는 힘
다양한 조건을 만족시키는 실제 구현 능력
기능 단위가 아닌, 프로그램 단위로 사고하는 습관
마침내 자신의 힘으로 코드를 끝까지 작성하는 경험

지금 필요한 건 더 많은 강의가 아닙니다.

코드를 스스로 완성해 나가는 훈련,
그것이 지금 실력을 끌어올릴 가장 현실적인 방법입니다.
자세한 안내 보기: 프리미엄 코칭 안내 바로가기
또는 카카오톡 상담방: 얌얌코딩 상담방