일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- parameter
- Contour
- Class
- SERIAL
- Barcode
- APP
- atmega328
- compare
- file access
- mfc
- aduino
- length
- Overloading
- java
- memory
- Android
- public
- preprocessing
- sensor
- Read
- wpf
- Binary
- stream
- Pointer
- Unity
- flutter
- digitalRead
- UNO
- Encapusulation
- inheritance
- Today
- Total
폴크(FOLC)
C++ 배열 과 포인터 본문
# 배열
# 같은 타입(자료형)의 변수들의 모임
> 1차원 ~ N차원 까지 사용 가능 ( 메모리를 넘지 않는 상황 )
> 보통 1차원 ~ 2차원 까지를 가장 많이 이용
# 특징
> 배열을 선언할때 길이는 상수 이어야 한다.
> 첫번째 번호는 0번 부터 시작
> 컴파일러는 배열의 길이가 아닌 배열의 주소값을 이용하여 접근한다.
> C++11 이상
- 배열 초기화 시점에 대입 연산자[=]를 사용하지 않아도 된다.
- 값을 지정하지 않고 {} 중괄호 만으로 0값으로 초기화 가능
- 암시적인 변환(narrowing cast) 를 방지 해준다.
# 메모리 크기
> 배열의 자료형 * 배열의 길이
> 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;
> std::cout<<*a_ptr<<**b_ptr<<endl;
'교육 관련 > C++' 카테고리의 다른 글
C++ 메모리는? (0) | 2022.02.24 |
---|---|
C++ 파라미터 전달 방법 (0) | 2022.02.22 |
C++ 함수 와 변수 (0) | 2022.02.19 |
C++ 제어 관련 명령문 (0) | 2022.02.17 |
C++ 연산자 (0) | 2022.02.03 |