[Schizo!, 2007. 12. 7. 18:24, study/programming]
포인터는 처음 들어갈 때 아주 중요합니다. 구조에 대한 정확한 이해가 있어야 파일 입출력에 가서도 헷갈리지 않아요.
기본적으로 C에서의 배열은 행과 열로 이루어진 것이 아니라 하나의 선 위에 위치해 있다는 표현이 좋겠네요.(그림을 그려가면서 설명하면 좋은데 조금 아쉽네요.) 교수에 따라 처음에 문제를 빠르게 이해시키려고 행과 열로 설명하는 교수도 있는데 그건 잘못된 교육이라고 생각합니다. 그런 사람들이 하는 것은 a라는 배열 안에 12 34 56 이렇게 자료가 들어가 있다는 말인데 C에서는 그런 식으로 자료가 들어가지 않습니다. int a[3][2]= { {1,2},{3,4},{5,6}}; 이 선언문을 예로 들면 int a[3][2]에서 일단 a라는 이름을 가진 int형 공간을 2*3개만큼 만들어 줍니다. 배열은 가장 뒷자리 부터 생각하셔야 합니다. "int형을 가진 2개의 자료가 3개 모여서 a라는 배열을 이룬다." { {1,2},{3,4},{5,6}};는 자료를 넣어주는 거죠 1은 a[0][0], 2는 a[0][1]의 자리에 들어갑니다. (배열의 자리가 0부터 시작하는 건 아시죠?) 이 둘을 a[0]으로 표현할수 있습니다. *a[0]을 하면 1과 2가 나오죠. 마찬가지로 a[1][0] = 3, a[1][1] = 4, a[2][0] = 5, a[2][1] = 6 이렇게 들어갑니다. 또한 a[3][3] 이렇게 고쳐 보니 *(ptr+0)=1 *(ptr+1)=2 *(ptr+2)=0 *(ptr+3)=3 *(ptr+4)=4 *(ptr+5)=0 이렇게 나오는 이유는 int a[3][3]은 "int형을 가진 3개의 자료가 3개 모인 배열a" 이렇게 되죠. 그리고 초기값을 지정해 줄때 { {1,2},{3,4},{5,6}};이렇게만 넣어줬기 때문에 3번째 자리 즉, a[0][2], a[1][2], a[2][2]의 자리에 아무런 값이 들어가지 않았다는 말입니다. 값을 지정해주지 않고 프린트문을 넣을 경우 프로그램에 따라 쓰레기값이 나올수도 있습니다. 지금 배열에는 1,2,??,3,4,??,5,6,?? 이렇게 들어가 있죠. 그리고 앞에서 부터 3개씩 끊어 배열에 넣습니다. a[0][0]부터시작해서 1을 넣고 뒷자리를 늘려주죠 a[0][1]에 2를 넣고 a[0][2]에 초기화되지 않은 값을 넣고, 이제 뒷자리가 3개 다 입력되었으니 다시 앞의 자리를 늘려주고(a[1][0]) 다시 자료를 대입하는 식이죠. ******* 만약 { {1,2},{3,4},{5,6}};이 식이 { 1,2,3,4,5,6};이런 식으로 중괄호 없이 넣어줬다면 a[0][0] = 1 a[0][1] = 2 a[0][2] = 3 a[1][0] = 4 a[1][1] = 5 a[1][2] = 6 a[2][0] = 비초기화 a[2][1] = 비초기화 a[2][2] = 비초기화 이렇게 대입됩니다. 가능하면 중괄호를 넣어주는 습관을 기르시는 게 좋겠네요. 'study > programming' 카테고리의 다른 글
|
||||||||||||