구조체로 성적관리하는 간단한 프로그램을 만들어 보고 있는데,
포인터로 구조체에 접근해서 하다가 이상한 현상을 발견했어요.
구조체 배열을 student[40] 이라고 선언하고,
입력은 포인터를 이용해서 student[41]에 데이터들을 넣었더니 ..
이럴수가 구조체의 형태대로 출력이 되는거예요 ㅜㅜ
메모리 주소값을 찍어보니 student[39] 다음에 student[40], student[41] 이렇게 순차적으로 메모리값이 주어져있네요.
그래서 실험을 해본다고 아래와 같이 구조체대신 배열을 이용해서 간단한 예제를 짰는데,
배열의 크기는 10이지만 입력을 a[11]까지 넣어서 출력해보면
결국 출력이 된단 말이죠..
어떻게 이럴수가 있죠?
특히 구조체에서 char, int, float 형태대로 각각 저장되서 읽히는게 너무너무
신기하고 이상함 ㅜㅜ
미스터리 갤에 가지 않도록 제발 도와주세요 ㅜㅜ

#include <stdio.h>

int main()
{
 int a[10];
 int *pa = a;
 int temp, num, count, i;

 printf(\"몇명을 입력하시겠습니까? >>\");
 scanf(\"%d\", &count);

 for(i=0; i<count; i++) {
  printf(\"번호를 입력하세요 >>\");
  scanf(\"%d\", &num);

  printf(\"입력할 수를 입력하세요 >>\");
  scanf(\"%d\", &temp);
  a[num-1] = temp;

  printf(\"입력한 데이터들는 다음과 같다.\\n\");
  printf(\"%d번에 %d를 입력\\n\", num, a[num-1]);
 }

 printf(\"%d\", a[11]);
}

-----------수정-----------------------------
더 극단적으로 예를 들자면
#include <stdio.h>

int main()
{
 int a[10];
 int temp;


 printf(\"입력할 수를 입력하세요 >>\");
 scanf(\"%d\", &temp);
 a[12] = temp;

 printf(\"입력한 데이터는 다음과 같다.\\n\");
 printf(\"13번에 %d를 입력\\n\",  a[12]);
 

}
이렇게 하면 오버플로우가 발생 안하고, 그냥 내가 입력한 값이 출력 된다는 거...
a는 크기가 10인데 어째서 12에 입력, 출력이 가능한거지??