C언어에서 배열을 선언할 때 컴파일러에게 선언하는 것이 배열임을 알려주는 [ ]지시 연산자를 사용해요.
포인터를 선언할 때는 포인터임을 알려주는 * 지시 연산자를 사용해요.
배열을 선언하려면 컴파일러에게 선언하는 것이 배열임을 알려주는 [ ]지시 연산자 내부에 원소 개수를 지정하세요.
그리고 배열 이름과 지시 연산자, 원소 개수를 제외한 나머지 부분이 원소 형식이예요.
포인터도 변수 이름과 지시 연산자를 제외한 나머지 부분이 원소 형식이죠.
int arr[10]; //배열 선언문, 원소 개수:10, 원소 형식: int
int *p = arr; //포인터 선언문, 원소 형식: int
int arr[10]; 구문은 원소 형식이 int 이고 원소 개수가 10인 배열 arr을 나타내는 선언문이예요.
컴파일러는 int 형식의 메모리 크기 X 원소 개수의 메모리를 할당하고 배열명은 할당한 메모리 주소를 의미한답니다.
즉 배열명은 첫 번째 원소의 메모리 주소를 의미하여 int 형식의 포인터 상수처럼 사용할 수 있어요.
배열을 선언할 때는 여러 개의 원소의 값을 지정할 수 있어요.
배열 선언문에서 초기값을 지정하려면 { } 연산자에 초기값을 콤마로 구분하여 나열하세요.
그리고 초기값을 지정하지 않은 멤버는 컴파일러가 0으로 초기화 해 준답니다.
주의할 사항은 배열 선언문에서 초기값을 지정하지 않았을 때는 초기화해 주지 않는다는 거예요.
int arr1[5]={1,2}; //int arr1[5]={1,2,0,0,0};과 같은 표현
char arr2[10]; //배열 선언문, 원소 개수:10, 원소 형식: char, 각 원소의 값은 쓰레기 값
int arr3[5]={1,2}; //int arr4[5]={1,2,0,0,0};과 같은 표현
그리고 배열을 선언하면서 초기화 구문을 사용하면 원소 개수를 나타내지 않을 수 있어요.
이 때는 초기화한 개수가 원소 개수가 되요.
하지만 명확하게 원소 개수를 지정하는 것이 프로그램의 논리적 버그를 줄일 수 있는 좋은 습관이예요.
그리고 배열은 컴파일 시점에 메모리 크기를 결정하여 동작 중에 배열의 크기를 바꿀 수 없어요.
만약 크기를 중간에 바꾸길 원하면 동적 메모리 할당을 사용하세요.
책의 뒷 부분에서 동적 메모리 할당은 배울거예요.
int arr3[]= {1,2,3}; //배열 선언문, 원소 개수: 3 (초기값을 지정한 개수), 원소 형식 int
◈ 배열의 초기화 예
#include <stdio.h>
int main()
{
int arr1[4]={1,2};
int arr2[4];
int index = 0;
for(index = 0; index<4; index++)
{
printf("arr1[%d]: %d\n",index, arr1[index]);
}
for(index = 0; index<4; index++)
{
printf("arr2[%d]: %d\n",index, arr2[index]);
}
return 0;
}
◈ 실행 결과
arr[0]: 1
arr[1]: 2
arr[2]: 0
arr[3]: 0
arr2[0]: -858993460 (의미없는 쓰레기 값임)
arr2[1]: -858993460 (의미없는 쓰레기 값임)
arr2[2]: 858993460 (의미없는 쓰레기 값임)
arr2[3]: 858993460 (의미없는 쓰레기 값임)
◈ 기본 연습
1. 한 학생의 국어 성적, 영어 성적, 수학 성적을 관리하는 배열을 선언하세요.
그리고 초기값으로 국어 성적은 80, 영어 성적은 60, 수학 성적은 90으로 지정하고 각 원소의 값을 출력하세요.
2. 다음의 출력 결과를 예측하시오.
#include <stdio.h>
int main()
{
int arr[10]={1};
int index = 0;
for(index = 0; index<10; index++)
{
printf("%d\n",arr[index]);
}
return 0;
}
3. 세 학생의 국어 성적, 영어 성적, 수학 성적을 관리하는 배열을 선언하세요.
그리고 세 명의 성적을 입력받아 과목별 합계와 평균을 출력하시오.
그리고 학생별로 합계와 평균을 출력하시오.
'언어 자료구조 알고리즘 > 디딤돌 C언어' 카테고리의 다른 글
51. 정리하기 (0) | 2016.01.01 |
---|---|
50. 인덱스 연산자 (0) | 2016.01.01 |
49. 간접 연산자 (0) | 2016.01.01 |
48. 포인터와 - 연산 (0) | 2016.01.01 |
47. 포인터 + 정수 (0) | 2016.01.01 |
45. 배열과 포인터 개요 (0) | 2016.01.01 |
44. 정리하기 (0) | 2016.01.01 |
43. 매크로 구문 (0) | 2016.01.01 |
42. 제어문 연습 - 별출력 (0) | 2016.01.01 |
41. 반복문 (while, do while, for) (0) | 2016.01.01 |