피씨컴의 기울어진 공관

● 배열이란?

같은 자료형의 연속적인 기억공간 하나의 이름과 인덱스([,])로 변수를 관리한다

● 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
Posted by 피씨컴