● 배열이란?
같은 자료형의 연속적인 기억공간 하나의 이름과 인덱스([,])로 변수를 관리한다
● int a[]
운영체제로 부터 메모리 공간 어딘가에 int 정수 4바이트 X 그배열의 크기 만큼의 공간을 연속적으로 할당받고 그앞에 a라는 문패를 만들고 그속에는 각각 쓰레기 값이 들어있다.
● 변수와 배열의 차이
1. 그 연속된 공간의 맨처음 위치
2. 총크기는 타입 크기 X 연속된 개수
3. 배열의 이름 -> 포인터
모두 같은뜻
● int array[10]
int 형 이므로 4바이트 만큼 주소가 건너뛴다.
● 모배열 특징
모배열은 포인트 변수
하지만 주소값을 변경할 수 없다 (상수)
주소값이 바뀌면 배열 위치를 알수 없기 때문
배열상수 == 배열의 이름 == 모배열 == 상수포인터
● A[2]
A
현재 배열의 맨처음 위치를 나타내는 동시에 배열의 이름이 된다. 보통 배열 A라고 부른다
위와 같은 A를 모배열이라고 부른다
[2]
현재 배열에서 이 변수의 위치를 나타내는 수로 0부터 표시되기 때문에 현재 이 변수는 2번째 있는 변수라는 걸 알수 있다
위와 같은 [ ] 안의 수를 인덱스(index) 라고 한다.
● 키포인트
배열 요소들은 언제나 메모리에 연속적으로 저장된다
모배열은 왼쪽 값(L-value)로 사용불가능 하다
L-value(left-value): 다음 조건을 만족하는 expression
- 특정 메모리 위치를 가리키고 있는 것
- 어떤 값을 assign할 수 있는 것
- & 연산자를 통해 해당 메모리의 주소값을 가져올 수 있는 것
R-value(right-value) : left-value가 아닌 expression
- 값을 담을 수 없음 (can't assign)
- L-value에 값을 담기 위해 임시(temporary)로 생성된 expression
즉, 임시적으로 표현식이 끝나면 없어지는 값들 (다음 줄에서 사라짐) - & 연산자를 통해 해당 메모리의 주소 값을 가져올 수 없음
구분 |
L-value |
R-value |
상수 |
불가능 |
기능(상수 값 그 자체) |
연산자가 있는 수식 |
불가능 |
기능(수식의 결과값) |
단순 변수 V |
자신이 기억된 위치 |
가능(V에 기록된 값) |
포인터 변수 P |
P 자신이 기억된 위치 |
P가 가리키는 기억장소의 위치 |
배열 A[i] |
A에서 i번째 위치 |
A에서 i번째 위치에 기록된 값 |
e.g. ++a는 L-value지만, a++는 R-value이다.
● 문자열
문자를 연속적으로 나열된것
- 컴퓨터의미
데이터로 다루는 일련의 문자
- 문자열을 저장하기 위한 자료형이 없다
- 문자를 연속적으로 나열하여 문자열을 표현
- char형 배열이 문자열
- 문자열을 표현할때 " " 를 사용
● 문장열 끝에는 항상 NULL(0) 문자가 존재한다.
'\0' == NULL == 0 == 문자열의 끝 구분
● 문자열의 출력시 문자열의 총크기에 상관없이 NULL 끄지만 출력한다
※ 그래서 "ab\0vb"를 출력하면 ab만 나온다
● 사용가능한 크기
일반배열 : 배열의 총 크기
char배열 : 문자열 총크기의 -1 (NULL문자)
● 화면출력
일반배열 : 해당 인덱스만 출력
char배열 : 해당 부분부터 NULL문자전 까지 출력
● 기본적인 자료 사용
일반배열 : 각각 독립적인 변수로 사용
char배열 : 하나의 문자열로서 사용(독립적으로도 사용가능)
● 문자열 상수
값이 변경되지 않는 문자열 상수
● char * : 변수로 상수의 시작위치를 저장할 수 있다.
char * p = "안녕하세요";
cout << p << endl;
--------------------
char str[10] = "abc";
str = "hello";
↑ 상수포인터이며 모배열이라 여기서 한번정한걸 다시 바꿀 수는 없다
● 문자 & 아스키 코드
영문 1바이트
한글 2바이트
● 배열 요소 구하는 공식
배열의 총 크기 / 배열 하나의 크기
sizeof(e) / sizeof(int)
● (char *)A - (char *)B -> 형변환 하면 주소 연산이 되어서 A와 B의 주소차를 알 수 있음
'프로그래밍 > 공부' 카테고리의 다른 글
5장 구조체 (0) | 2013.03.03 |
---|---|
6장 함수 (0) | 2013.02.26 |
5일차? 6일차? (2/19) (0) | 2013.02.21 |
4일차? 5일차? (2/18) (0) | 2013.02.21 |
3일차? 4일차? (2/15) (0) | 2013.02.21 |