printf("ho_tari\n");
ep.22 배열, 포인터1 본문
2024.8.6
• 배열의 특징
배열 선언
• TYPE은 배열 요소에 저장되는 값의 자료형을 나타냄
• C 언어의 배열은 순수형이라서 모든 요소는 같은 자료형으로 구성
• 동일한 크기의 공간을 사용
배열 사용
• 배열의 요소는 변수와 비슷
• 일반 변수처럼 표현식의 일부에 사용할 수 있고 함수에 값으로 전달 가능
• 배열 요소에 저장되는 값이나 배열 요소를 저장하는 변수는 같은 자료형이거나 함께 사용할 수 있는 자료형
• 정수형이 아닌 값은 인덱스로 사용 불가
sizeof() 연산자와 배열
• sizeof(배열_이름)을 사용하면 배열의 모든 요소가 차지하는 메모리 공간의 크기를 반환
• 배열의 크기가 N이라면 sizeof(배열 요소) * N이 반환
• sizeof(배열_이름[인덱스])를 사용하면 배열 요소 한 개의 크기가 바이트 단위로 반환
배열 초기화
• 배열을 선언할 때 전역이나 지역 정적 배열로 선언하면 자동으로 초기화
• 하지만 일반 지역변수로 선언되는 배열은 초기화되지도 않고 쓰레기 (Garbage) 값이 존재
• 전역 배열, 정적 배열, 지역 배열 변수들을 선언하고 있는 그대로의 배열 요소 값들을 출력
• 전역 또는 정적 배열을 0이 아닌 다른 값으로 초기화시킬 때 사용
• 지역변수로 선언되는 배열을 초기화시킬 때 사용
선언 후 초기화
• 선언한 뒤에 초기화시키는 것은 요소 값을 직접 초기화
• 반복문 이용 가능
선언하면서 초기화
• 배열을 선언하고 중괄호 안에 배열 요소의 값 지정
배열 요소와 초기자 개수가 일치할 때
• 순서대로 값을 배열 요소에 저장
요소 개수가 초기자 개수보다 클 때
• 요소를 순서대로 채우고 남는 공간은 0에 근접한 값으로 채움
초기자 개수가 요소 개수보다 클 때
• 배열의 모든 요소를 채울 때까지 순서대로 초기자의 값을 배열 요소에 저장
배열과 대입 연산
• 배열은 요소별로 값을 저장하거나 접근하는 것만 가능
• 배열 전체를 대입 연산에 사용 불가
• 배열을 선언하고 초기화할 때 중괄호에 초기자를 지정해서 배열 요소 각각에 값을 저장 가능
• 일반 대입 연산에서는 요소별로 값을 저장하거나 사용해야 함
함수에 배열 요소 전달
• 함수에 배열의 요소를 전달하는 것은 일반 변수를 전달하는 것과 동일
함수에 배열 전달
• 함수에 배열을 인자로 전달할 때는 배열의 이름을 사용
함수에 배열 크기 함께 전달
▪ 함수에 배열이 전달되는 과정
• 배열 변수 이름은 배열의 시작 주소를 나타내는 상수 변수
• 배열은 선언할 때 첫 번째 요소의 메모리 주소가 저장되는 변수
• 배열의 시작 주소(첫 번째 배열 요소의 주소)만 전달
2차원 배열
• 5개의 정수를 저장할 수 있는 1차원 배열
• 2차원 배열은 열(column)과 행(row)으로 구성된 표
• 2차원 배열은 1차원 배열을 요소로 가지는 배열
2차원 배열 초기화
• 1차원 배열을 초기화한 것들을 이용해서 2차원 배열을 초기화
C 언어의 다차원 배열
• C 언어의 배열은 void를 제외한 어떤 종류의 자료형도 포함 가능
• 배열을 요소로 포함하는 것도 가능
• 2차원 배열은 1차원 배열을 요소로 포함하는 배열
• 3차원 배열은 2차원 배열을 요소로 포함하는 배열
• 1차원 배열은 요소들을 나열해 놓은 것
• 2차원 배열은 1차원 배열을 연속적으로 배치한 것
• 3차원 배열은 비슷하게 2차원 배열을 연속적으로 나열한 것
• C 언어의 N차원 배열은 N - 1차원 부분 배열의 배열에 불과
포인터의 필요성
포인터 자료형 변수 선언 방법
• 포인터 변수를 선언하는 방법
• 포인터 변수를 선언하고 NULL 포인터로 초기화
NULL 포인터
• 주솟값이 없다는 의미의 상수(constant value)
• 주로 포인터 변수를 초기화할 때 사용
포인터 자료형의 크기
• 메모리 주소의 크기는 하드웨어와 운영체제에 의해서 결정
• 때문에 시스템에 따라서 다를 수 있음
• 비주얼 스튜디오 컴파일러나 GCC는 32 비트/64 비트용 코드 생성을 선택 가능
• 어떤 종류의 코드를 생성하느냐에 따라 포인터 변수의 크기는 달라짐
포인터 변수 사용과 간접 참조 연산자(*)
• 간접 참조(dereference)란 포인터 변수에 저장되어 있는 메모리 주소에 있는 값을 접근하는 것
• 간접 참조는 역참조라고도 부름
• 때로는 포인터 변수가 가리키는 메모리 공간의 값에 접근한다고 말하기도 함
포인터 변수로 간접 참조하는 방법
• 변수 이름 앞에 간접 참조 연산자인 ‘*’를 붙임
포인터 형 변환
• TYPE이 다른 포인터 변수는 다른 자료형으로 인식
• 다른 자료형 포인터 사이에 값을 저장하려면 강제 형 변환 사용
• 포인터 형 변환은 (TYPE*)을 붙임
정수를 메모리에 저장한 후 바이트 단위로 출력하는 프로그램
• 정수형 변수 n을 선언하고 0A040E03 저장
• int* 포인터 변수에 n의 주소 저장
어려운 포인터 변수 선언
• 일반 변수와 포인터 변수의 차이는 *로 구별
포인터 변수 선언 방법 정리
배열과 포인터에 대해서 배웠다...어렵다 어려워..
C 언어에서 포인터는 정말 어려운 내용이라는 것을 배울 때마다 느낀다. 그래도 열심히 해보자..
'두산 로보틱스 부트캠프 ROKEY > C 교육' 카테고리의 다른 글
ep.23 문자열, 포인터2 (0) | 2024.08.07 |
---|---|
ep.21 반복문, 함수 (0) | 2024.08.05 |
ep.20 전처리기, 연산자, 표준 입출력 함수, 조건문 (0) | 2024.08.02 |
ep.19 자료형, 변수, 상수, printf() 함수 (0) | 2024.08.01 |