전날 배열에 이어서 2차원 배열 수업 내용
2차원 배열 선언 char data [5][4] 를 선언할때
연산자 우선순위로 왼쪽에서 오른쪽으로 연산을 수행 (중학교때 배운 행열과 비슷하게 생각하면 된다. 행 | 열 ㅡ)
화면상의 좌표가 (x,y) 이면 배열은 data [y][x]로 사용
2차원 데이터를 -> 1차원 데이터로 변환 - {(행 번호 - 1) * 열 개수} + 열 번호 - 1
char temp [N,M]; // L,M,N 값은 숫자 상수로 가정
char test [L]; // M*N = L 의 가정
1. test[ a ] 항목과 temp [a / N] [a % M] 의 항목의 위치는 같다
2. temp [b][c] 항목과 test[b * N + c ] 의 항목의 위치는 같다
결론 - 2차원 배열과 1차원 배열의 메모리의 형태는 동일하다 (2차원데이터 <-> 1차원데이터 값을 변환하는것에 이해를 해야함)
포인터
- 일반변수도 주소를 저장할 수 있으나, 저장된 주소의 메모리에 가서 값을 읽거나 저장할 수 있는 기능은 없다.
- c언어는 간접 주소 지정 방식으로 동작하는 포인터 문법을 제공
- 자신이 사용하고 싶은 메모리의 '주소'를 저장하고 있는 메모리가 포인터
- 포인터 변수는 자료형을 선언하지 않아도무조건 크기가 4바이트
순서대로 나열한 96, 5의 숫자에서 숫자의 작은순대로 나열하기위한 포인터의 예제
직접적인 주소 방식으로 쓰는 일반 함수로써는 스왑함수안에서만 적용이되고, 메인함수에서는 적용이 되질 않는다
그러므로 주소와 값을 이용한 포인터 함수가 필요한 것
포인터 변수를 선언할때 * 연산자 앞에 적는 자료형은 포인터 변수가 가르키는 대상의 크기를 의미
(char - 1byte , short - 2byte, int - 4byte, double - 8byte 만큼의 주소 연산)
포인터 변수가 가르키는 대상의 자료형과 포인터 변수 선언시 적는 자료형은 동일하게 지정하는것이 일반적이나 의도적으로 다르게 사용하는 경우도 있다.
void * 형 포인터 - 정해져 있지 않다 (포인터 변수가 가르키는 대상을 모를 때)
위에 예제로 어느정도 쉽게 설명을 잘해주셔서 이해는 갔지만 반복적으로 몇번 더 들어보고 해봐야 완벽하게 이해가 갈것같다..
제일 어렵다고 느껴지는게 포인트 부분이 맞는거같다 ㅠㅠ
표준 입력함수
1일차때 간단한 입출력 함수들을 배웠었는데 조금 더 자세하게 알려주는 강의다.
rewind (stdin) - 입력버퍼를 초기화시켜주는 함수 (표준입력버퍼에 남아있는 입력정보를 모두 지워주는함수이다)
getchar,getc - 문자 한 개를 입력받는 함수 (엔터키도 표준입력으로 받아서 사용할때 주의해야한다. 한번 더 사용해 엔터값을 제거해주거 나 rewind 함수를 사용해야한다)
gets - '문자열'을 입력받는 함수 (엔터키는 남지 않고 null 값 0이 추가된다)
scanf - 입력 형식 키워드와 변수의 자료형이 일치해야한다. (이미 너무 많이 설명은 들은 상태라 자세한거는 생략)
'C 언어' 카테고리의 다른 글
아무것도 모르는 코딩 배우기 7일차 (C언어 배열과 포인터, 메모리 할당) (0) | 2022.11.11 |
---|---|
아무것도 모르는 코딩 배우기 5일차 (C언어 사용자 정의 함수, 배열) (0) | 2022.11.07 |
아무것도 모르는 코딩 배우기 4일차 (C언어 IO, scanf) (0) | 2022.11.03 |
아무것도 모르는 코딩 배우기 3일차 (C언어 for문(반복문)) (0) | 2022.11.02 |
아무것도 모르는 코딩 배우기 2일차 (C언어 기초) (0) | 2022.11.02 |