아래 둘리.CSIEDA님께서 좋은 자료 링크해주셨는데..
다음과 같이 배열선언하면
char var[10][3];
3Byte씩 10개 즉 30Byte 메모리가 확보됩니다.
30Byte는 모두 연속되어있구요
님의 질문과 같이 배열인덱스가 맞지 않는 경우라도 메모리가 할당되어있는 부분이면
문제가 발생하지는 않습니다.
char var[10][3];
memset(var,' ',sizeof(var));
var[3][3]='a'; //var[4][0] 에 값이 들어갑니다.
var[3][4]='b'; //var[4][1]
var[3][5]='c'; //var[4][2]
var[3][6]='d'; //var[5][0] , 여기까진 문제발생하지는 않음
var[9][3]='e'; // 이렇게 하면 엉뚱한곳에 값이 입력되므로 심각한 문제가 발생할수도 있죠
그럼..
한수동 님이 쓰신 글 :
: 문자열에 대해 여쭈어 본것이 아니라
: char 형이든 int 형이든
: 1차원 배열에 경우 만약 int a[5]; 라고 잡는다면
: a 변수는 4바이트씩 총 5개 연속으로 메모리에 공간이 잡히잖아요.(이것도 올바르게 아느지 잘 모르겠네요;)
:
: 그렇다면 2차원 배열은 어떤식으로 메모리에 공간이 잡히느냐 이것이 궁금한것입니다..
:
: int a[5][3]; 라고 잡고서
: a[3][4] = 100; 이라고 명령해도 a배열 어딘가에 100이라는 값이 저장이 되는
:
: 이런 경우를 발견해서 이렇게질문을 드리는 것입니다
:
:
:
: 한수동 님이 쓰신 글 :
: : 2차원 배열을 쓰면...
: : 주소 잡는게 어떤 식으로 잡히는 거죠?
: : 만약 char s[10][3]; 이라고 하면
: :
: : 주소를
: : 3개씩 10개가 순서대로 잡히나요 아니면
: : 1개씩 10개 잡고 또한번 1개씩 10개 잡고 또한번 1개씩 10개 잡는
: : 이런식인가요?
|