-
05 제어문과 함수/배열Studies/C++ 2022. 1. 18. 18:53
1. 포인터 배열
포인터 배열은 포인터 변수들을 배열요소로 갖는 배열이다.
char* ptr_ary[5];
1-1 실습 1
10개의 정수 데이터를 랜덤하게 저장한 후, 원본 데이터의 순서는 변경시키지 말고,
데이터를 정렬하여 출력하세요.
(1) 코드
#include<iostream> #include<string> #include<ctime> using namespace std; void printArr(int* num) { for (int i = 0; i < 6; i++) { cout << num[i] << " "; } cout << endl; } int main() { int num[6] = { 10,50,60,20,5,70 }; int* arr[6]; for (int i = 0; i < 6; i++) { arr[i] = &num[i]; } cout << "정렬전: "; printArr(num); //정렬 for (int i = 0; i < 5; i++) { for (int j = i + 1; j < 6; j++) { if (*arr[i] < *arr[j]) { int* temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } } } cout << "정렬후: "; printArr(num); cout << endl; cout << "정렬후: "; for (int* i : arr) cout << *i<<" " ; return 0; }
int num[6] 배열이 있다.
int* arr[6] 은 &num[i] , 즉 배열방의 주소를 저장한다.
정렬 알고리즘에서 arr에서 배열방의 주소를 swap한다.
따라서 결과적으로 *arr[i] 를 출력하면 정렬되어 출력되며
printArr()의 매개변수로 int* num ,즉 배열의 주소값을 넘겨서 출력해보면
원래의 데이터의 순서대로 출력된다.
(2)실행결과
2.문자열 배열
2가지 방법이 있다.
1)문자열 배열의 메모리 구조
char str[]="Hello";
str[0]='h'로 원하는 문자를 바꿀 수 있다.
2)문자열 포인터 변수의 선언과 메모리 구조
char *str="Hello";
str은 포인터 변수로, 1)번과 달리 원하는 문자를 바꿀 수 없다.
2-1 실습 1
3차원 배열 : 3명,id,password
(1)코드
#include<iostream> #include<string> #include<ctime> using namespace std; int main() { char userinfo[3][2][10] = { {"greenjoa1","1234"},{"greenjoa2","2234"},{"greenjoa3","3234"} }; char id[10], pw[10]; cout << "아이디와 비밀번호 : "; cin >> id >> pw; for (int i = 0; i < 3; i++) { if (strcmp(id, userinfo[i][0]) == 0) { if (strcmp(pw, userinfo[i][1]) == 0) { cout << "로그인 성공" << endl; break; } } } return 0; }
(2)실행결과
3.레퍼러스 변수를 인자로 전달하기
(1)코드
#include<iostream> #include<string> #include<ctime> using namespace std; void swap(int& a, int& b) { int temp = a; a = b; b = temp; } int main() { int a = 10, b = 20; swap(a, b); cout << a << " " << b << endl; return 0; }
(2)실행결과
2-2 실습 2
로그인 구현
checkID checkPW 포인터변수, 레퍼런스 변수 형식으로 매개변수 전달해서 함수 구현해보기
#include<iostream> #include<ctime> using namespace std; bool checkID(char (&userinfo)[3][2][10], char(& id)[10],int& index) { //포인터변수로 //bool checkID(char (*userinfo)[2][10],char* id) //bool checkID(char userinfo[][2][10], char id[]) { for (int i = 0; i < 3; i++) { if (strcmp(id, userinfo[i][0]) == 0) { index = i; return true; } } } bool checkPW(char(&userinfo)[3][2][10], char(&pw)[10], int& index) { if (strcmp(pw, userinfo[index][1]) == 0) return true; else return false; } int main() { char userinfo[3][2][10] = { {"greenjoa1","1234"},{"greenjoa1","1234"} ,{"greenjoa1","1234"} }; char id[10], pw[10]; cout << "아이디와 비밀번호 : "; cin >> id >> pw; int index; if (checkID(userinfo, id,index)) { if (checkPW(userinfo, pw,index)) { } } return 0; }