오늘은 c++ 복습을 하는데 약간 까먹은 개념들이 있어 다시 정리하려고 한다.
#이차원 배열
-이차원 배열 개념-
이차원 배열은 말 그대로 2차원으로 배열을 만들 수 있다.
첫 번째 그림처럼 열과 행으로 생각할 수 있고, 순서는 한 행당 열이 끝난 후, 다음 행이 시작된다.
행과 열을 구분하기 어려울 때, 열 쇠로(세로)라고 외우면 외우기 쉽다.
왼쪽 코드는 이차원 배열을 정의한 후 출력한 것으로,
위의 코드(arr)를 아래 코드(arr1) 보다 추천한다.
위의 코드가 더 보기 편하기 때문이다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
#include <iostream>
int main(){
int arr[3][4] = {
{1,2,3,4},
{5,6,7,8},
{9,10,11,12}
};
int arr1[3][4] = {1,2,3,4,
5,6,7,8,
9,10,11,12};
for(int i = 0; i < 3; i++){
for(int j = 0; j < 4; j++){
std::cout << arr[i][j] << std::endl;
}
}
}
|
cs |
-이차원 배열을 활용한 파스칼의 삼각형 코드 짜기-
다음은, 이차원 배열을 활용한 파스칼의 삼각형 코드 짜기이다.
먼저, 코드를 짜기 전에, 대충 어떻게 짤지 생각을 해보았다.
위에서 배운 이차원 배열을 행과 열 개념으로 파스칼의 코드를 짤 수 있었다.
파스칼 삼각형을 짠 코드이다.
행 10, 열 10인 코드를 짰기에 파스칼의 층 수보다 큰 수가 입력됐을 때, 다시 입력받는 코드도 구현해보았다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
#include <iostream>
#include <climits> //for 'SSIZE_MAX'
//파스칼의 삼각형
int main() {
using namespace std;
int arr[10][10];
int num; //파스칼 층 수
cin >> num;
while(!cin || num > 10){ //11이상의 수를 입력 받을 때, 다시 입력받기
cin.clear();
cin.ignore(SSIZE_MAX, '\n');
cin >> num;
}
for(int i = 0; i < num; i++){
for (int j = 0; j <= i; j++){
if((j == 0) || (i == j)){
arr[i][j] = 1;
}
else{
arr[i][j] = arr[i-1][j-1] + arr[i-1][j];
}
cout << arr[i][j] << " ";
}
cout<< endl;
}
return 0;
}
|
cs |
구현 결과이다. 11이상인 11,12가 입력됐을 때는 다시 입력받는 모습을 보여준다.
반대로, 10이 입력되었을 때는 파스칼의 삼각형이 출력된다.
# 포인터
-포인터의 개념-
포인터(pointer) : 변수의 주소를 저장하는 변수
포인터는 c++에서 너무 중요하죠!!!!!!!!!
가장 잘 이해해야 할 것은,
* : 주소값에 해당하는 변수를 가져온다.
&: 해당 변수의 주소 값을 가져온다.
아래 코드를 보면 이해하기 쉬울 겁니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
#include <iostream>
int main(){
using namespace std;
int a = 20;
int *ptr; //int형 a를 가리키는 포인터 선언
//a를 가리킴
ptr = &a;
int **ptr_ptr; //int형 ptr포인터를 가리키는 포인터 선언
//ptr을 가리킴
ptr_ptr = &ptr;
cout << "a의 값: " << a << endl;
cout << "a의 주소값: " << &a << endl;
cout << "ptr의 값: " << ptr << endl; //a의 주소값을 가지고 있음
cout << "ptr의 주소값: " << &ptr << endl;
cout << "*ptr의 값: " << *ptr << endl; //a의 값을 나타냄
cout << "ptr_ptr의 값: " << ptr_ptr << endl; //ptr의 주소값을 가지고 있음
cout << "*ptr_ptr의 값: " << *ptr_ptr << endl; //ptr의 값을 나타냄
cout << "**ptr의 값: " << **ptr_ptr << endl; //a의 값을 나타냄
// * : 주소값에 해당하는 변수를 가져온다.
// & : 해당 변수의 주소값을 가져온다.
}
|
cs |
출처(source) - 유튜브 두들낙서님
https://www.youtube.com/c/%EB%91%90%EB%93%A4%EB%82%99%EC%84%9C
c++ 최고의 강좌,,
'공부 > c++' 카테고리의 다른 글
#6 call-by-value | call-by-reference (0) | 2021.08.26 |
---|---|
#5 void함수에서 return을 사용하는 방법 (0) | 2021.08.26 |
#4 배열 총 문제 (0) | 2021.08.26 |
#3 포인터 배열 | 포인터 배열과 배열 포인터의 차이 | 문자열과 포인터 배열 | c++ (0) | 2021.08.11 |
#2 배열과 포인터 | 포인터 간단 복습 | 포인터의 주소값 | 배열 포인터 | 2차원 배열과 배열 포인터 | c++ (0) | 2021.08.08 |