210909, C언어 입문 - day 8

Min Hyeok·2021년 9월 9일
0

C언어 개념 익히기

목록 보기
8/19

무-친. 난 지금 내가 12장까지 여기에 복습 한 줄 알고 안 적고 있었는데. 아니 11장까지밖에 없네?????????? 이건 내 실수다 부라덜. 여기 안적는다고 공부안하고있는거 아님! 이거 12장까지 복습한줄알고 13장 분할해서 공부하면서 백준풀고있었다.

여튼, 오늘 온김에 12장 복습해놓자.

12장, 배열과 문자열

자.. 상당히 중요한 내용이라고 생각한다. 문자같은 경우는 걍
char A = 'a'; 이런식으로 땜빵 치울 수 있는데, 문자열은 저장을 못하거든. 이런 경우에 배열을 써줘야한다..

자 우선, 배열이란 머냐. 엥? 줄서는거 아닌감? 이 생각하면 큰 경기도 오산시. 배열이란, "데이터를 그룹으로 묶어서 표현"하는거다.

항상 보고 배우는것보단 해보는게 제일 빠르다.

short student[46];

요렇게 적으면, "학생 46명의 뭔가의 data를 각각 2바이트 정수형 데이따 공간에 저장한다"가 된다. 이 자료형의 총 크기가 2바이트? ㄴㄴ. 2바이트가 46개다. 92바이트임. 와 개똑똑해..

그리고 일반적으로 프로그래머들은 배열에 들어있는 값은 0으로 초기화해준다고 한다. 왠지는 실무뛰면 알겠지. for문 써주거나. short student[46] = {0,}; 이렇게 해주면 됨.

그리고 꼬옥 꼬옥 알아두어야 할게, 46명이고 위처럼 적으면 학생 번호는 1번부터 시작하는게 아니다. "0부터 시작한다."

뭔 개소리냐고?

student가 "46명"이란게 0번째, 1번째, .. 45번째. 이렇게 총 46명이라고. 그러니까 for문으로 student 46명을 다 호출해서 초기화하려면

int i=0;
for ( ; i<46 ; i++) {
	student[i] = 0;
}

이런 느낌이다.

그리고 배열 선언할 때, short data[] = {3, 4, 2, 4}; 이렇게 [ ] 안에 요소 개수 생략 가능하다. 요소 개수가 뒤에 정확히 명시된다면 요로케 생략해도 됨.

그 다으은 문자열. 만약 배열에서 문자열 저장하려면 char로도 충분하다고 한다. 1바이트에 문자 하나 넣기 쌉앵간이라 그냥 문자 배열 저장하는 자료형을 char로 적합하다 하나보다. 추측임.

char data[] = "happy"; 라고 적으면 된다. 물론
char data[6] = {'h', 'a', 'p', 'p', 'y', 0}; 이렇게 저장해도 됨. [ ]안에 요소 개수 생략한건 앞에서 언급한 논리와 같은거임. 아 근데 문자열은 마지막에 0이 생략되어 있어서 저 happy는 5바이트가 아니고 6바이트다? 꼭 aradooja. 그리고 이 문자열을 prinf에서 가져와서 출력하고싶으면

char data[] = "druwa";
printf("%s\n", data);

요렇게 %s를 사용해서 가져와주면 됨.

그리고 이 문자열을 다루는 C 내장 함수가 따로있다. 대신에 위에 전처리기에 #include <string.h>를 꼮!@!!!!!!!!!!! 넣어줘야함.

  1. strlen(문자열이 저장된 변수 이름), 문자열 길이 구한다.

int length;
char data="fdzz";
length = strlen(data);
  1. strcpy(복사해서 저장할 변수 이름, 복사할 기준 변수 이름), 문자열 복사
  2. strcat(기존 문자열이 저장된 변수 이름, 새로 덧붙일 문자열), 문자열 붙여넣기

그냥 이 두개가 ctrl c, ctrl v라고 생각하자

char data="fdzz"
char result[30];
strcpy(result, data); /** result에 data의 데이터 저장 **/
strcat(result, "~~!"); /** result에 저장된 data "fdzz"뒤에 ~~! 붙임. 즉 결과값은 "fdzz~~!"**/

이렇다.

그 다음은 또 중요한 2차원 배열이다.
앞서 언급한 배열들은 1차원이고, 이번껀 2차원이다. 그냥 x축 y축 수직하는 직교좌표 생각하면 편함.

char data[x][y]; 이런 식으로 쓸 수 있다. x가 행 개수이고, y가 열 개수이다.
만약 char data[3][2];라면?

x x
b b
d d

이게 실제로 컴파일 할 때는 1차원 형태로 변환 된다는데,
x x b b d d가 위처럼 변환되는거다.

..그런 느낌임. 이거 의외로 내가 가끔가다 헷갈리는 것 같은데.. 헷갈리지 말자.

근데 이게 또 내가 알던것과 다른 지식 중 하나가, 내가 원하면 행 단위로 묶거나, 열 단위로 묶어서 서로 다르게 쓸 수 있더라고?

char data[5][4]; => 5행 4열, 행 단위로 묶음
char data[4][5]; => 4열 5행, 열 단위로 묶음

이렇게.. 근데 컴퓨터가 편하려면 그냥 행 단위로 묶는게 낫다더라. 다행. 내가 알던데로 하는게 편한거라.

그리고 2차원 배열 초기화는 아는 내용이니까. PASS.

그리고 1차원 배열 test[a]와 temp[M][N]이 있을 때,

test[a] 와 temp[a / N][a % N] 항목은 위치가 같다.
temp[b][c] 항목과 test[b * N + c] 항목은 위치가 같다.

뭔소리냐고? 알아서 해석해보자. 나도 이렇게만 적어놓고 따로 해석하려고 이렇게 적어놨다. (a, b, c는 숫자 상수라고 가정한다)

여기까지.

0개의 댓글