일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- sensor
- memory
- Contour
- stream
- Unity
- length
- public
- preprocessing
- wpf
- digitalRead
- Barcode
- Binary
- Read
- java
- SERIAL
- mfc
- Overloading
- aduino
- compare
- atmega328
- flutter
- inheritance
- APP
- Class
- Android
- UNO
- file access
- Pointer
- Encapusulation
- parameter
- Today
- Total
폴크(FOLC)
C 배열 과 포인터 본문
# 배열
# 같은 타입(자료형)의 변수들의 모임
> 1차원 ~ N차원 까지 사용 가능 ( 메모리를 넘지 않는 상황 )
> 보통 1차원 ~ 2차원 까지를 가장 많이 이용
# 특징
> 배열을 선언할때 길이는 상수 이어야 한다.
> 첫번째 번호는 0번 부터 시작
> 컴파일러는 배열의 길이가 아닌 배열의 주소값을 이용하여 접근한다.
# 메모리 크기
> 배열의 자료형 * 배열의 길이
> sizeof(이름) / sizeof(자료형)
# N차원 배열
> 2차원 이상의 배열
> 배열의 각 요소가 배열이 될 수 있다.
# 1차원 배열
> 구조1 : 자료형 이름 [ 길이 ];
- 생성될때 초기화 하지 않았으므로 주의해서 사용
> 구조2 : 자료형 이름 [ 길이 ] = { 요소1, 요소2, ... };
- 생성될때 초기화 하였으므로 각 위치에 맞는 요소값으로 채워짐 ( 0 -> max )
- 자료형과 요소의 타입이 동일해야 함.
> 구조3 : 자료형 이름 [ ] = { 요소1, 요소2, ... };
- 생성될때 초기화 하면서 배열의 길이를 요소 개수 만큼 자동 생성
- 자료형과 요소의 타입이 동일해야 함.
# 2차원 배열
> 구조1 : 자료형 이름 [ 길이1 ][ 길이2 ];
- 생성될때 초기화 하지 않았으므로 주의해서 사용
> 구조2 : 자료형 이름 [ 길이1 ][ 길이2 ] = { 요소1, 요소2, ... };
- 생성될때 초기화 하였으므로 각 위치에 맞는 요소값으로 채워짐 ( 길이2 -> 길이1, 0 -> max )
- 자료형과 요소의 타입이 동일해야 함.
> 구조3 : 자료형 이름 [ 길이1 ][ 길이2 ] = { 요소1, 요소2, ... };
> 구조4 : 자료형 이름 [ 길이1 ][ 길이2 ] = { {요소1, 요소2}, {,,}, ... };
> 구조5 : 자료형 이름 [ 길이1 ][ 길이2 ] = { {요소1, }, {요소2, 요소3}, {,,}, ... };
- 생성될때 초기화 하면서 배열의 길이를 요소 개수 만큼 자동 생성
- 자료형과 요소의 타입이 동일해야 함.
- 길이2 에 대해서는 되도록이면 길이를 명시하고 사용하도록 한다.
# 포인터
# 변수의 주소값으로 해당 데이터가 저장되어 있는 메모리 시작 위치
> 1byte 크기씩 나누어서 관리 ( char 1칸, int 는 4칸 )
> 각 자료형에 맞는 pointer 변수를 선언하여 저장/사용 가능
# 형식
> 자료형 * 이름 = &동일 자료형 변수 이름;
> 자료형 * 이름 = 동일 자료형의 주소값;
> 자료형과 변수명 사이에 작성
> 생성할때 초기화 하여 사용해야 함.
# 특징
> 포인터 변수에 접근하는 방식
- 참조 연산자 : * - pointer
- 주소 연산자 : & - ampersand
> * 로 선언한 변수는 &로 주소값으로 초기화 또는 입력이 가능
> &로 주소값에 접근한 변수의 실제 값은 *로 사용 가능
> 주소 값을 더하거나 빼기하여 다음 자료형 크기만큼의 위치로 이동 가능
# 예제
> int a = 100;
> int *a_ptr = &a;
> int *b_ptr = &a_ptr;
> printf("%d, %d", *a_ptr, **b_ptr);
'교육 관련 > C' 카테고리의 다른 글
C 메모리는? (0) | 2022.01.20 |
---|---|
C 파라미터 전달 방법 (0) | 2022.01.17 |
C 함수 와 변수 (0) | 2022.01.12 |
C 제어 관련 명령문 (0) | 2022.01.10 |
C 연산자 (0) | 2022.01.08 |