printf("ho_tari\n");

ep.22 배열, 포인터1 본문

두산 로보틱스 부트캠프 ROKEY/C 교육

ep.22 배열, 포인터1

호타리 2024. 8. 6. 16:33

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 언어에서 포인터는 정말 어려운 내용이라는 것을 배울 때마다 느낀다. 그래도 열심히 해보자..