배열 : 동일한 하나의 데이터형을 가진 연속된 원소들
프로그램이 배열에서 값을 꺼내 오기는 하지만, 배열에 새로운 값을 써 넣지 않을 경우에는 배열을 선언 할 때, const를 사용하는 것이 좋다.
배열 원소는 보통의 변수와 같다. 사용자가 이들을 초기화 하지 않는다면 그들은 아무 값이나 가질 수 있다.
서로 다른 저장클래스는 서로 다른 특성을 가지고 있다.
배열을 사용할 때 초기값 리스트에 들어 있는 항목들의 개수는 배열의 크기와 일치 해야한다.
배열을 일부분만 초기화 하면 나머지 원소들이 0으로 설정된다.
배열 전체의 크기를 배열 원소 하나의 크로 나누면, 그 배열에 몇개의 원소가 있는지 알 수 있다.
지정초기화자를 사용하면 초기화할 원소들을 사용자가 선택할 수 있다.
ex) int arr[6] = {[5] = 212};
사용자가 이 방식으로 최소한 하나의 원소를 초기화 하면, 초기화 하지 않은 나머지 원소들은 0으로 설정된다.
하나의 지정초기화자 뒤에, [4] = 31,30,31 와 같이, 여러 개의 값이 붙으면, 여분으로 붙는 값들은 이어지는 다음 원소들을 초기화 하는데 사용된다. 특정 원소가 어떤값으로 한번 이상 초기화 되면, 마지막에 행해진 초기화가 유효하다.
배열을 사용할 때, 유효한 범위 내에 있는 배열 인덱스를 사용하고 있는지 반드시 확인해야 한다. 즉, 배열 인덱스의 값이 그 배열에 대해 유효한지 확인 해야한다.
배열 인덱스는 0부터 시작한다.
그러므로 배열크기가 사용되는 배열의 선언부와 기타 다른장소에 기호상수를 사용하는 것이다. 이렇게 함으로써 프로그램 전체에 걸쳐서 동일한 배열 크기를 사용할 수 있게 해준다.
일반적으로, 3차원 배열은 삼중 중첩루프로 처리하고, 4차원 배열은 사중 중첩 루프로 처리한다. 더높은 차원의 배열도 마찬가지 방식으로 처리한다.
컴퓨터의 하드웨어 명령들은 주소를 많이 사용하기 때문에, 포인터를 사용하면 컴퓨터의 표현방식에 가까운 방식으로 표현할 수 있다. 포인터는 배열을 처리하는 매우 효율적인 방법을 제공한다.
포인터의 값은 그것이 가리키는 객체의 주소이다. 내부적으로 주소를 나타내는 방식은 하드웨어 따라 다르다. 많은 컴퓨터들이 바이트 단위로 주소를 매긴다.
포인터에 *연산자를 적용하면, 그 포인터가 가리키는 객체에 저장되어 있는 값을 얻는다.
포인터에 1을 더하면, 그 포인터가 가리키는 객체의 바이트 수 크기 만큼 포인터 값이 증가한다.
보통함수에 배열을 알리는 방법은 배열의 시작위치를 나타내기 위해 하나의 포인터 매개변수를 사용하고, 몇개의 원소를 처리할 것인지를 나타내기 위해 하나의 정수 매개변수를 사용한다.
함수에 배열을 알리는 또다른 방법은 두개의 포인터를 전달하는 것이다. 첫번째 포인터는 배열의 시작위치를 나타낸다.
두번째 포인터는 배열이 끝나는 위치를 나타낸다.
C는, 배열을 위한 공간을 할당할 때 배열의 끝 바로 다음의 첫번째 위치를 가리키는 포인터가 유효하다는 것을 보장한다.
total = *start++;
에서 *와 ++의 우선순위는 같지만 오른쪽에서 왼쪽으로 결합한다. 이것은, ++가 *start에 적용되는것이아니라 start에 적용된다는 것을 의미한다. -> *(start++)
배열을 처리하는 함수는 포인터를 전달인자로 사용한다.
'Programming > C' 카테고리의 다른 글
C언어 공부 16 (0) | 2019.05.11 |
---|---|
C언어 공부 15 (0) | 2019.05.11 |
C언어 공부 13 (0) | 2019.05.11 |
프로그래밍 연습 5 (0) | 2019.05.09 |
C언어 공부 12 (0) | 2019.05.08 |