배열

    [08] 시스템 프로그래밍 기초 (포인터 심화)

    일반 배열과 포인터로 만든 배열의 차이 먼저 스트링 constants는 텍스트 세그먼트에 저장된다. 이 텍스트 세그먼트는 수정 불가하다. 배열은 스택 영역에 복사를 뜬다. 따라서 수정이 가능하다. 그러나 포인터는 스트링 콘스턴트를 텍스트 세그먼트에 둔 채로 텍스트 세그먼트의 주소값만 받아온다. 이것은 즉, 포인터 배열은 수정이 불가하다는 뜻이다. # a[2][3] 배열이 있다면 다음과 같이 나타낼 수 있다. a[0][0] == **a; a[0][1] == *(*a+1); a[0][2] == *(*a+2); a[1][0] == **(a+1); a[1][1] == *(*(a+1)+1); a[1][2] == *(*(a+1)+2); 배열은 고정적으로 메모리를 할당하는 데에 비해 포인터는 그때마다 동적으로 할당한..

    [07] 시스템 프로그래밍 기초(배열과 포인터)

    배열(Array) p.246 int grade[100]; 이라는 배열이 있다고 하자. 이때 주소값은 0x100이라고 하면 grade[1]의 주소갑은 0x104이다. int가 4byte이기 때문이다. char grade[] = "HANYANG"; 이라는 배열은 문자열의 각각의 문자를 각 문자 배열 안에 넣는 것이다. 따라서 grade[0]에는 'H'가, grade[1]에는 'A'가 들어있다. 주소값을 참조할 때는 &를 쓴다. grade의 주소값을 0x100이라 한다면 &grade[0]는 0x100이다. # Array space 32bit로는 4GB밖에 쓰지 못하기 때문에 64bit 운영체제가 나왔다. Pointer p.248 char *p = grade; p++; 배열은 상수(constant)이지만 포인터..

    [10] 프로그램 설계 방법론(자료구조와 배열)

    배열(array) : 동일한 타입의 값을 정해진 개수만큼 나란히 이어 붙여 놓은 구조 int[] r; //null int[] r = new int[6]; 배열(array)는 객체(object) 배열 생성 시 각 원소는 기본값으로 초기화된다 인덱스(index)는 정수로 0부터 시작한다 배열의 크기가 6이면, 인덱스의 범위는 0~5이다 int [] s = r; 위의 코드는 "r이 갖고 있던 int 배열의 주소를 s도 갖게 하라" 라는 의미이다. 즉, 다음과 같다. 실행 중 범위를 벗어난 인덱스로 배열을 참조하면 ArrayIndexOutOfBoundsException 오류 발생한다 이 오류는 컴파일러가 잡을 수 없다. 프로그램을 만든 사람 책임!! int[] r = new int[12]; r[0] = 1; r..