사실 학교에서 자료구조 튜터링을 하고 있는데,
뭔가 가르쳐주는 입장에서는 완벽하게 이해를 해야할 것 같아서,
수업도 다시 듣고 복습도 하면서 궁금했던 부분을 다시 찾아보고 공부하는 중이다.
그런데 열심히 자료조사도하고 피피티도 만들었는데, 한시간 반 수업하고 끝내기에는 (내 기준) 너무 아쉬워서
티스토리에도 열심히 정리를 해보려고 한다.
( 우리 튜티들 만약 이 글을 보고 있다면 그냥 무시해주세요 ㅠ )
그리고 느낀점도 적을 것이다
나중에는 꼭 교수님같은 강의력을 가진 발표력 만렙이 되어있기를 ^^..~
문자열과 포인터
1. 문자와 문자열
문자: 컴퓨터가 기억하거나 송출할 수 있는 숫자나 알파벳 또는 특수 문자를 이르는 말
- 문자 상수: ‘A‘
- 문자 변수: char형 변수
문자열: 연속된 문자들의 모임
-널 종료 문자열: 끝을 나타내는 널 문자를 함께 저장
-문자열 상수: “hello world“, “A”
-문자열 변수: 문자 배열(char 배열)
-만약, 배열의 6번째에 null을 넣어주면 hello까지 출력( *(ptr + 5) = ‘\0’;)
2. 문자열 문자배열
문자열: char s1[10] = “String”
– 일반적으로 저장되는 문자의 개수는 배열 크기보다 작음
– 저장한 문자들 다음에 ‘\0’을 넣어 뒤의 공간과 구분
– “ ”로 표시, 배열의 특성을 가지나 약간의 예외가 있음
– 문자열은 문자배열과는 다르나, 배열의 특성은 그대로 가짐
– 이 경우, string 내에 저장되는 문자의 개수는 보이는 것 보다 1개 더 많음 (즉, 보이는 문자 바로 뒤에 NULL(‘\0’) 문자가 자동 추가)
문자배열: s2[10] = {‘S’, ‘t’, ‘r’, ‘i’, ‘n’, ‘g’};
차이점: 문자열 배열은 항상 마지막에 이 문자열을 종료한다는 null값을 넣는데 문자 배열은 넣지 않는다.
3. 문자배열, 정수 배열
문자배열: 배열 명을 써주면 한번에 들어있는 정보 모두 출력해줌. (인자 값으로 줄 때 주소 값이 넘어가기 때문)
정수 배열: 모든 데이터 출력하고 싶으면 루프 돌며 그 위치에 해당하는 원소 출력 해야함
4. 문자열 선언
- 문자열 크기: 저장할 문자열의 길이 + 1
- 저장할 문자열의 길이 +1보다 문자열의 크기가 작으면 오류 발생! => Null이 들어갈 자리가 없기 때문!
5. 문자배열 초기화
-문자열의 끝에 널 문자 저장!
-배열의 나머지 원소도 널 문자로 초기화
ex) char str[10] = “abc”;
-배열 크기 생략 가능
ex) char str[] = “abc”; //배열크기는 4!
-배열 전체 널 문자로 초기화 가능
ex) char str[] = “”;
동적 메모리 할당
1. 동적 메모리 할당 vs 정적 메모리 할당
- 동적 메모리 할당
* 입력되는 데이터에 맞게 기억공간을 확보 하는 것 (프로그램 실행 중 결정)
Int num;
cin>>num;
int *ptr = new int[num]; // ptr은 num개의 원소로 이루어진 배열을 가리킴
- 정적 메모리 할당
* 프로그램을 작성하는 단계에서 필요한 기억공간의 크기를 결정하는 것
int examples[10]; //examples 배열에는 10개의 원소가 들어갈 수 있다.
2. 동적 메모리할당 사용 이유
- 정적 메모리 할당을 하게 되면, 기억공간이 낭비될 경우가 많다.
(큰 배열을 선언해야 하므로)
=> 메모리의 낭비를 최소화 하기 위해 입력되는 데이터에 맞게 기억공간 할당
구조체, 객체와 포인터 관계
1. 구조체와 배열
- 구조체
* 타입이 다른 데이터를 하나로 묶는 방법
Ex) 학생 구조체
이름: 문자열
나이: int
점수: float
* 사용 예시
ex1)
struct employ {
char name[20];
int year;
int salary;
} kim, park, jung;
ex2)
struct employ {
char name[20];
int year;
int salary;
};
struct employ kim, park, jung;
- 배열
* 타입이 같은 데이터를 하나로 묶는 방법
* 여러 가지 종류의 데이터를 하나로 묶어서 관리
2. 클래스와 객체
- 클래스: 공통된 일을 수행하기 위해 모아 놓으면 좋을만한 변수와 함수들을 하나의 모듈로 캡슐화 시킨 사용자 정의 타입
- 객체: 클래스 타입에 의해 생성된 변수들
- 클래스와 구조체의 차이?!
=> 차이 없음.. C++에서는 더더욱 없음..!
=> 접근제어 지시자를 선언하지 않았을 경우 클래스는 private로, 구조체는 public으로 선언한다.
=> 클래스는 멤버 함수가 들어간다.
• public: 어디서든 접근 허용
• Private: 클래스 내에서만 접근 허용
3. 구조체 멤버 초기화
ex1)
struct Employee {
char id[20];
int age;
double wage;
};
struct employ kim = {“kim”, 2001, 300}, park = {“park”, 2012, 200}
ex2)
struct Employee {
char id[20];
int age;
double wage;
} kim = {“kim”, 2001, 300};
=>멤버의 초기값이 포함되지 않으면 해당 멤버는 기본값으로 초기화 된다.
4. 구조체 멤버 접근
개별 멤버에 접근하기 위해 점 연산자와 화살표 연산자 를 사용하면 된다.
kim.name = “kim”; ptr->name = “kim”; (*ptr).name = “kim;
kim.year = 2001; ptr->year = 2001; (*ptr).year = 2001;
kim.salary = 300; ptr->salary = 300; (*ptr).salary = 300;
도트 연산자: 개별 멤버에 접근하기 위해 멤버 선택 연산자(member selection operator: .) => 이름 자체를 사용
ptr -> name;으로 사용하면, 해당 주소 안의 name 라는 변수에 접근하는 것과 같음 // (*ptr).name도 같은 의미!
위의 내용을 토대로 1차시 수업을 하고, 2차시에는 사전에 과제로 내주었던 코딩테스트 풀이하고,
튜티들의 발표를 듣고 피드백을 해주었다.
질문은 없었지만 질문을 받는 시간을 가졌고, 다음 코딩테스트는 더 어려운걸로 준비해가기로 했다.
처음하다보니 준비시간은 엄청 길었지만 막상 수업을 해보니 금방 하고 넘어갈 수 있는 내용이었다.
다음에는 더 체계적으로 시뮬레이션까지 해봐야겠다.
'ⓢⓣⓤⓓⓨ > 자료구조' 카테고리의 다른 글
[자료구조] 큐 (0) | 2021.07.05 |
---|---|
[자료구조] 스택 (0) | 2021.05.24 |
[자료구조] 연결리스트 (0) | 2021.05.20 |
댓글