포인터를 활용한 1/2차원 배열의 값과 주소
학습목표
1차원 배열의 값과 주소에 대해 이해하고 여러 가지 형태를 사용하여 출력할 수 있다.
2차원 배열의 값과 주소에 대해 이해하고 여러 가지 형태를 사용하여 출력할 수 있다.
지난 시간에 이어 2차원 배열에 대하여 수업을 해 보아요. \=_=/ \=_=/
시간이 남아 퓨전...(드래곤볼 참조)
퓨... \=_=/ \=_=/
전... o-(=_=)o- -o(=_=)-o
합... /=_=/ \=_=\

배열에서 배열의 이름자체는 배열의 주소 값을 나타낸다.
ex) A[5]; printf("%p", A); -> A의 주소 출력

int A[5]라는 배열이 있다고 하면,


A는 주소 값으로써 상수이고 p는 주소 변수이다.
p가 변수임을 확인해 보자.


p는 대입연산자(=)를 활용하여 그 값을 변할 수 있는 주소 변수임을 알 수 있다.
하지만 배열 A 또는 B는 주소 값을 나타내는 주소 상수로써 값을 변화 시킬 수 없다.

변수와 상수의 차이라는 점을 제외하고는 배열의 이름과 주소 상수는 똑같이 사용할 수 있다.
/*** 네트워크 삼천포 ***/




natservice가 있을 때 이것을 삭제해야 컴퓨터가 정상적으로 가동한다.
삭제하는 방법 http://todaki.tistory.com/2646
각설! 네트워크 삼천포 break;
--------------------------------------------------------------------------
배열의 타입은 int[X]이다. // X는 선언 시 입력한 상수.
const를 어떻게 쓰느냐에 따라 고정되는 값이 다르다.
포인터 변수 int * p에서,
const를 * 앞에 붙이면 *가 가리키는 값을 수정할 수 없고,
const를 변수명 바로 앞에 붙이면 가리키는 주소 값을 바꿀 수 없게 된다.


2차원 배열로 넘어가서,
우선 for문을 사용하여 값과


차원수만큼의 대괄호([])가 있으면 그것은 값을 뜻한다.
차원수만큼의 포인터(*)가 있으면 그것은 값을 뜻한다.
그러므로 대괄호의 역할을 포인터가 할 수 있다. 또한 포인터의 역할을 대괄호가 할 수 있다.
정리하면 대괄호의 수 + 포인터의 수 = 차원수 가 되면 값을 뜻한다.
대괄호의 수와 포인터의 수가 차원수보다 작게 되면 그것은 주소를 뜻한다.
코드와 결과 값!
/*** 2dimArry.c ***/
#include <stdio.h>
int main(void) { /*** 사용자의 가독성을 생각한 배열 코딩 ***/
int A[2][3]= { {1,2,3}, {4,5,6} }; int iCnt1; //행의 출력을 위한 카운터 int iCnt2; //열의 출력을 위한 카운터
for(iCnt1=0; iCnt1<2; ++iCnt1) { for(iCnt2=0; iCnt2<3; ++iCnt2) { printf("[%d]", A[iCnt1][iCnt2]); } putchar('\n'); }
putchar('\n'); for(iCnt1=0; iCnt1<2; ++iCnt1) { for(iCnt2=0; iCnt2<3; ++iCnt2) { printf("[%08X]", &A[iCnt1][iCnt2]); } putchar('\n'); } putchar('\n');
printf("A[0][0]의 값은 [%d]입니다.\n", A[0][0]); printf("*(A[0]+0)의 값은 [%d]입니다.\n", *(A[0]+0)); printf("*((*A+0)+0)의 값은 [%d]입니다.\n", *((*A+0)+0)); printf("*(A[0])의 값은 [%d]입니다.\n", *(A[0])); printf("**A의 값은 [%d]입니다.\n\n", **A);
printf("A[1][2]의 값은 [%d]입니다.\n", A[1][2]); printf("*(A[1]+2)의 값은 [%d]입니다.\n", *(A[1]+2)); printf("*((*A+2)+3)의 값은 [%d]입니다.\n\n", *((*A+2)+3));
printf("A[0][0]의 주소는 [%08X]입니다.\n", &A[0][0]); printf("(A[0]+0)의 주소는 [%08X]입니다.\n", (A[0]+0)); printf("((A+0)+0)의 주소는 [%08X]입니다.\n", ((A+0)+0));
return 0;
} |
