이 동작 은 "모든 항목을 하나로 설정"을 의미 int array [ROW][COLUMN] = {1};
하지 않기 때문에 발생 합니다. 이것이 어떻게 작동하는지 단계별로 설명하겠습니다.
배열을 초기화하는 명시적이고 지나치게 명확한 방법은 다음과 같습니다.
#define ROW 2
#define COLUMN 2
int array [ROW][COLUMN] =
{
{0, 0},
{0, 0}
};
그러나 C를 사용하면 배열 (또는 구조체 / 유니온)의 일부 항목을 생략 할 수 있습니다. 예를 들어 다음과 같이 작성할 수 있습니다.
int array [ROW][COLUMN] =
{
{1, 2}
};
즉, 첫 번째 요소를 1과 2로 초기화하고 나머지 요소는 "정적 저장 기간이있는 것처럼"초기화합니다. C에는 프로그래머가 명시 적으로 초기화하지 않은 정적 저장 기간의 모든 개체를 0으로 설정해야한다는 규칙이 있습니다.
따라서 위의 예에서 첫 번째 행은 명시적인 값을 제공하지 않았기 때문에 1,2로 설정되고 다음 행은 0,0으로 설정됩니다.
다음으로 C에는 느슨한 중괄호 스타일을 허용하는 규칙이 있습니다. 첫 번째 예는 다음과 같이 작성할 수 있습니다.
int array [ROW][COLUMN] = {0, 0, 0, 0};
물론 이것은 형편없는 스타일이지만 읽고 이해하기가 더 어렵습니다. 하지만이 규칙은 편리합니다.
int array [ROW][COLUMN] = {0};
즉, "첫 번째 행의 첫 번째 열을 0으로 초기화하고 다른 모든 항목은 정적 저장 기간이있는 것처럼 초기화합니다. 즉, 0으로 설정합니다."
따라서 시도하면
int array [ROW][COLUMN] = {1};
이는 "첫 번째 행의 첫 번째 열을 1로 초기화하고 다른 모든 항목을 0으로 설정"을 의미합니다.