반응형

배열 20

[C# 동영상 강의] 12. 배열

[C# 동영상 강의] 12. 배열 다루는 내용배열Array 추상 클래스 대본 슬라이드 1참고 사이트: http://msdn.microsoft.com/ko-kr/library/9b9dty7d.aspx이번 강의에서는 배열에 대해서 살펴보기로 하겠습니다.슬라이드 2배열은 동일한 형식의 여러 개의 요소를 하나로 포함하는 형식입니다.배열은 Array 추상 클래스에서 파생이 되었으며모든 형식이 배열의 요소가 될 수 있습니다. 배열의 요소로 배열을 둘 경우 가변 배열을 형성할 수 있습니다. 배열의 요소를 초기화를 하지 않으면 기본 값으로 설정이 되며 기본 값은 숫자 배열 요소는 0, 참조 요소는 null입니다. 그리고 배열은 인덱스를 통해 배열 요소에 접근을 하게 되는데 인덱스는 0부터 시작을 하게 됩니다. 즉, 배..

3.1 배열과 vector [디딤돌 자료구조와 알고리즘 with C++]

3.1 배열과 vector 배열은 같은 종류의 자료를 연속적인 메모리에 보관하는 자료구조예요. C언어와 C++언어에서 제공하는 배열 형식은 개발 단계에서 원소 형식과 원소의 개수를 결정하는 정적인 구조를 갖고 있죠. 이러한 배열은 개발 도중에 원소의 개수를 변경할 수 없는 한계를 갖고 있어요. 하지만 C언어와 C++언어에서도 동적으로 메모리를 할당하는 함수와 연산을 제공하여 프로그램 동작 시에 연속적인 메모리를 할당하여 자료를 관리할 수 있어요. 특히 할당한 메모리에 보관한 자료의 개수를 기억해 두었다가 꽉 차면 메모리를 재할당하여 개발자가 배열의 크기를 신경쓰지 않게 구현할 수도 있어요. STL에서 제공하는 vector는 이러한 원리로 동작하게 만든 템플릿 클래스예요. 여기에서는 STL에서 제공하는 v..

[C#] 3.3 배열

3.3 배열 여러분도 잘 알다시피 배열은 같은 형식의 여러 개의 요소(원소)를 포함하는 데이터 구조입니다. C#에서는 효과적으로 배열을 표현하기 위해 추상 클래스 Array를 제공하고 있으며 모든 배열은 Array 기반의 파생 클래스 형식 개체입니다. 먼저, 가장 단순한 1차원 배열을 선언하고 사용하는 예를 살펴보기로 합시다. ▶ 1차원 배열의 선언 int[] arr = new int[4]{10,8,1,6}; for (int i = 0; i < arr.Length; i++) { Console.Write("{0} ", arr[i]); } ▶실행 결과 10 8 1 6 ▶Array 추상 클래스의 정적 메서드 Sort 사용 int[,] arr1; arr1 = new int[2, 3]; arr1 = new int..

50. 인덱스 연산자

C언어에서는 포인터와 정수 사이의 더하기 연산 후에 간접 연산을 수행하는 것을 간단하게 인덱스 연산으로 표현할 수 있어요. 인덱스 연산자는 배열 선언에 사용하는 지시 연산자 [ ]와 기호가 같아요. 선언문 이외에서 포인터와 정수가 피연산자인 이항 연산자 [ ]를 인덱스 연산자라 불러요. 인덱스 연산은 상대적 거리에 있는 원소를 접근할 수 있어요. 인덱스는 상대적 거리를 나타내기 때문에 n 번째 원소에 접근하려면 n-1을 사용해야 한답니다. int arr[3]={1,2,3}; int *p = arr; int index = 0; 위와 같이 배열과 포인터, 기본 형식을 선언하였을 때 arr[index]와 p[index]와 같이 사용하면 *(arr+index), *(p+index)와 같은 표현이예요. 인덱스 연..

49. 간접 연산자

피연산자로 포인터를 사용하는 더하기, 빼기 연산은 프로그램 메모리 주소를 계산하거나 상대적 거리를 계산하죠. 하지만 실제 개발자는 프로그램 메모리 주소를 아는 것은 큰 의미가 없어요. 개발자는 특정 프로그램 메모리 주소에 있는 값을 얻어오거나 설정하는 것을 원해요. C언어에서 포인터(배열 이름 포함)가 갖는 메모리 주소에 원하는 값을 설정하거나 얻어오는 방법은 크게 간접 연산자와 인덱스 연산자를 사용하는 방법이 있어요. 간접 연산자는 선언문이 아닌 코드 구문에서 포인터 형식을 피연산자로 오는 단항 연산자예요. 연산 기호는 포인터 변수를 선언할 때 사용한 지시 연산자 *와 같아요. 모양은 같지만 선언문에 있는 것은 선언한 변수가 포인터 형식임을 나타내는 지시 연산자예요. 간접 연산의 결과는 포인터 변수가 ..

48. 포인터와 - 연산

C 언어에서는 같은 원소의 포인터 사이의 - 연산을 제공하죠. 연산 결과는 정수 형식으로 두 포인터 사이의 원소 개수예요. 예를 들어 int 형식 변수 a의 값이 1016이고 int 형식 변수 b의 값이 1000일 때 a-b의 결과는 4랍니다. ◈ 포인터 형식 사이의 - 연산 #include int main() { int *a = (int *)1016; int *b = (int *)1000; printf("a:%d b:%d a-b:%d\n",a,b,a-b); return 0; } ◈ 실행 결과 a:1016 b:1000 a-b:4 ◈ 배열 이름과 포인터 형식 사이의 - 연산 #include int main() { int arr[10]; int *p = arr+4; printf("arr:%d p:%d p-a..

47. 포인터 + 정수

C 언어에서 배열 이름은 관리하는 메모리의 시작 주소를 의미하죠. 프로그램에서 배열 이름은 포인터 상수로 취급해요. 따라서 배열을 효과적으로 사용하려면 포인터 관련 연산자를 잘 사용할 수 있어야 겠죠. C 언어에서 + 연산에는 하나의 포인터 형식과 정수 형식을 피연산자가 오는 것을 허용해요. 이 때 연산 결과는 상대적 거리의 메모리 주소를 의미한답니다. 여기에서 말하는 상대적 거리는 예를 들어 알아볼게요. int 형식 원소의 포인터 변수의 값이 1000일 때 상대적 거리 4는 1000번지에서 int 형식 원소 4개 크기를 더한 주소예요. 즉 int 형식의 메모리 크기가 4바이트이므로 1000번지에서 상대적 거리 4는 1016이예요. 물론 여기서 1016은 정수 형식이 아니고 포인터 형식이랍니다. ◈ 포인..

46. 배열 선언문

C언어에서 배열을 선언할 때 컴파일러에게 선언하는 것이 배열임을 알려주는 [ ]지시 연산자를 사용해요. 포인터를 선언할 때는 포인터임을 알려주는 * 지시 연산자를 사용해요. 배열을 선언하려면 컴파일러에게 선언하는 것이 배열임을 알려주는 [ ]지시 연산자 내부에 원소 개수를 지정하세요. 그리고 배열 이름과 지시 연산자, 원소 개수를 제외한 나머지 부분이 원소 형식이예요. 포인터도 변수 이름과 지시 연산자를 제외한 나머지 부분이 원소 형식이죠. int arr[10]; //배열 선언문, 원소 개수:10, 원소 형식: int int *p = arr; //포인터 선언문, 원소 형식: int int arr[10]; 구문은 원소 형식이 int 이고 원소 개수가 10인 배열 arr을 나타내는 선언문이예요. 컴파일러는 ..

45. 배열과 포인터 개요

C언어에서는 같은 형식의 여러 데이터를 효과적으로 사용할 수 있는 배열을 제공하고 있어요. C언어에서 제공하는 기본 형식들은 변수가 관리하는 데이터가 하나여서 변수 이름은 갖고 있는 값을 의미하죠. 하지만 배열은 관리하는 데이터가 여러 개이므로 배열 이름이 특정 값을 대표할 수 없어요. C언어에서는 배열 이름은 관리하는 특정 값이 아닌 배열에 할당한 메모리의 시작 주소를 의미한답니다. 배열의 원소에 접근할 때는 배열 이름과 상대적 거리를 의미하는 인덱스 값을 사용하는 것이 일반적이예요. 예를 들어 3번째 원소를 접근하려면 시작 위치에서 거리 2이므로 인덱스 2를 사용해요. 따라서 상대적 거리를 나타낼 때 첫 번째 원소는 상대적 거리가 0이므로 n번째 원소는 상대적 거리가 n-1임을 잊지 마세요. 또한 C..

반응형