목록전체 글 (70)

포인터의 연산과 배열 인덱싱 (Pointer Arithmetic and Array Indexing) C++ 언어를 사용하면 포인터에서 정수 추가 또는 빼기 작업을 수행할 수 있다. 만약 ptr이 정수를 가리키면 ptr+1 은 ptr 다음 메모리의 정수 주소가 된다. ptr-1 은 ptr 이전 정수의 주소다. ptr+1은 ptr 뒤 메모리 주소를 반환하지 않고 ptr이 가리키는 객체의 다음 메모리 주소를 반환한다. ptr이 정수 (4바이트라고 가정)를 가리키면, ptr+3은 ptr 이후에 3개의 정수(12바이트)를 의미한다. ptr이 항상 1바이트인 char을 가리키면, ptr+3은 ptr 이후에 3개의 문자(3바이트)를 의미한다.' 포인터 산술 표현식을 계산할 때 컴파일러는 항상 피연산자에 가리키고 있는..

포인터와 정적 배열 C++에서 포인터와 배열은 밀접한 관련이 있다. 포인터와 정적 배열의 관계를 이해하는 것은 이후 메모리 동적할당, 동적배열을 이해할 때 중요한 기본이 된다. 포인터와 배열이 어떤 관계가 있는지 알아보자. Similarities between pointers and fixed arrays 지난 포스트에서 우리는 정적 배열을 정의하는 방법을 배웠다. 위의 것은 정수 5개의 배열이지만, 컴파일러에는 배열이 int[5]의 변수다. 각각 array[0], array[1] 및 array[4] 의 값을 가지고 있다. 그러나 배열 자체는 어떤 값을 갖고 있을까? 배열 변수는 마치 포인터인 것 처럼 배열의 첫 번째 요소의 주소를 가지고 있다. 다음 프로그램에서 이를 볼 수 있다. 위에서 만든 arra..

Null values and Null pointers 일반 변수와 마찬가지로 포인터는 인스턴스화 될 때 초기화되지 않는다. 값이 할당되지 않으면 포인터는 기본적으로 어떤 쓰레기 주소를 가리킨다. 포인터의 위험성 중 쓰레기 주소 값이 들어간 경우, de-referencing을 시도하게 되면 실제 메모리에 데이터가 잘 담겨있는 것이 아니라서, 엉뚱한 곳에 가서 데이터를 찾기 때문에 OS가 문제가 있다고 경고한다고 앞 포스팅에서 말씀드렸다. 이런 문제를 방지하기 위해서 null pointer라는 것을 사용한다. 메모리 주소 외에도 포인터가 저장할 수 있는 값이 하나 있다. 바로 null 값이다. null 값은 포인터가 아무것도 가리키지 않는다는 것을 의미하는 특수 값이다. null값을 가진 포인터를 null ..

포인터 소개 (Introduction to pointer) 우리는 변수는 값을 보유하고 있는 메모리 조각의 이름이라는 것을 배웠다. 프로그램이 변수를 인스턴스화 할 때 사용 가능한 메모리 주소가 변수에 자동으로 할당되고, 변수에 할당된 값은 이 메모리 주소에 저장된다. int x; CPU가 위 문장을 실행하면 RAM의 메모리 조각이 따로 설정된다. 예를 들어, 변수 x에 메모리 위치 140이 할당되었다고 가정해보자. 프로그램에서 변수 x를 표현식 또는 명령문으로 접근할 때마다 값을 얻으려면 메모리 위치 140을 찾아야 한다. 변수의 좋은 점은 우리가 어떤 특정한 메모리 주소가 할당되는지 걱정할 필요가 없다는 것이다. 지정된 식별자로 변수를 참조하면 컴파일러에서 이 이름을 할당된 메모리 주소로 변환한다. ..

C언어 스타일의 배열 문자열 C-style strings 이전 포스트에서 문자열 (string) 은 문자들의 연속적인 모음이라고 정의했다. 문자열은 C++에서 텍스트로 작업하는 기본 방법이며 std::string은 C++에서 문자열로 작업하는 것을 쉽게 만든다. Modern C++은 'std::string'과 'C-style 문자열' 두 가지를 지원한다. 이 포스트에서는 C-style 문자열을 자세히 살펴보자. C-style strings C 스타일 문자열은 단순히 null 종료자를 가지는 문자 배열이다. null 종료자 (null terminator)는 문자열의 끝을 나타내는 데 사용하는 특수 문자 \0 (ascii code 0)이다. 즉, C 스타일 문자열은 null로 끝나는 문자열이다. C 스타일 ..

다차원 배열 (Multidimensional Arrays) 컴퓨터 속에 메모리는 1차원적인 주소 공간을 가지고 있다. 단독주택 여러 개가 일렬로 늘어져 있는 형태를 생각하면 된다. 하지만 프로그래밍을 하다 보면 아파트 같은 구조도 필요해진다. 한층에 5개씩 집이 있고 층이 3개가 있다면 총 15개의 집이 있다. 이렇게 1차원 적인 메모리 구조를 2차원 인 것처럼 사용할 수 있게 해주는 것이 다차원 배열이다. 2차원만 되는것이 아니고 3차원, 4차원, 4차원 다 사용할 수 있다. 배열의 요소는 배열을 포함하여 모든 자료형일 수 있다. 배열을 가진 배열을 다차원 배열(Multidimensional array)이라고 한다. int array[3][5]; 위 배열은 2개의 첨자를 가지고 있으므로 2차원 배열이다..

배열과 선택 정렬 Selection Sort 맛있는 음식이 여러가지 있을 때 어느 것을 먼저 먹을지 순서를 정하기도 하고, 사람이 여러명 있을 때 키 순서대로 세워보기도 한다. 이렇게 순서를 맞춰주는 것을 정렬 sorting 이라고 부른다. 배열의 사용법을 연습해보기 위해서 정렬방법들 중 비교적 간단한 편에 속하는 선택정렬을 배워 보겠다. 먼저 선택정렬이 어떻게 이루어 지는지 살펴보자. 선택 정렬 Selection Sort 선택 정렬은 다음 단계를 수행해서 배열을 오름차순으로 정렬한다. 1. 배열 index 0에서 시작하여 배열 전체를 검색해서 가장 작은 값을 찾는다. 2. 배열에서 찾은 가장 작은 값을 index 0의 값과 swap한다. 3. 다음 index에서 1단계와 2단계를 반복한다. 즉, 배열에..

배열과 반복문(Array and Loop) 이전 포스트에서 배열 인덱스는 상수 값이 아니어도 된다는 것을 알았다. 인덱스는 변수일 수도 있다. 즉, 루프 변수를 사용하여 배열의 모든 요소를 반복하고 일부 계산을 수행할 수 있다. 루프 변수가 차례대로 각 배열 요소에 접근하는 데 사용되는 경우 배열을 반복한는 iterating 이라고도 한다. 배열은 같은 타입의 데이터가 메모리안에 일렬로 쭉 나열되어 있는 것인데 이러한 성질은 반복문과 사용하기에 굉장히 좋다. 실제로 우리가 하는 프로그래밍의 대부분은 array를 반복문으로 어떻게 처리 할 것인가가 될 수도 있다. 이번 포스팅에서는 배열과 반복문을 같이 사용하는 방법, 배열을 이용해서 계산하는 방법, 주의사항 을 다루겠다. [EX 1] 학생수가 5명이라고 ..