C 포인터 – 2장 포인터2010년 1월 25일김요셉1
2-1 포인터의 선언2
포인터란?※ 포인터 변수  주소를 저장하기 위한 메모리공간
변수의 주소를 저장하는 변수※ 포인터 변수의 선언type *포인터 변수;※ 포인터 변수의 Value포인터 변수가 갖는 값 (Value)은 주소이다.이 때, 이주소에는 포인터 변수가 선언된 type과 같은 type으로 선언된 값이어야 한다.포인터 변수 = &변수;3
*연산자, &연산자※*연산자operand : 대표값이 주소인 수식이나 변수
*operand : operand 에 저장된 주소에 저장된 값 ※&연산자operand : 변수,포인터 변수
&operand: operand 가 메모리                  에 저장된시작주소 &변수변수 포인터변수포인터 변수 = &변수*포인터 변수4
포인터란?Memoryn (20)0012FF10np (0012FF10)…c (65)0012FF2B…cp (0012FF2B)5
포인터 변수 vs변수6
2-2 다차원 포인터7
다차원 포인터란?※ 다차원 포인터 변수  포인터 변수의 주소를 저장하는포인터 변수※ 다차원 포인터 변수의 선언type **포인터 변수;       ->  2차원type ***포인터 변수;      ->  3차원npppnppnpn
다차원 포인터란?Memorynppp (0012FF10)0012FF040012FF050012FF060012FF07npp (0012FF1C)0012FF100012FF110012FF120012FF130012FF1Cnp (0012FF28)0012FF1D0012FF1E0012FF1Fn (20)0012FF280012FF290012FF2A0012FF2B9
2-3 다차원 포인터의 가·감산10
포인터의 덧셈/뺄셈 연산포인터의 덧셈 및 뺄셈주소의 증가 및 감소오른쪽 예제에서는sizeof( int)=4이므로 4씩 증가 또는 감소된다.주의포인터의 곱셈, 나눗셈은 존재하지 않는다.p + i -> p + sizeof(T) x ip - i -> p - sizeof(T) x i(if the type of p is T*.)- 4+ 4
다차원 포인터의 덧셈/뺄셈 연산다차원 포인터다차원 포인터에서 type은저장된 값의 타입은 포인터이므로, 포인터는 32bit 컴퓨터에서 4byte 이므로, 4씩 증가 감소된다.cpp (0012FF1C)0012FF100012FF110012FF120012FF13+10012FF1Ccp (0012FF2B)cp + 1 -> cp + sizeof(char) x 1 cpp + 1 -> cpp + sizeof(char*) x 1(if the type of p is T*.)0012FF1D0012FF1E0012FF1F0012FF20+10012FF2Bc (41)0012FF2C
C 포인터 – 3장 배열2010년 1월 25일김요셉13
3-1 배열의 선언14
배열이란?※ 배열 같은 자료형(데이터)의 연속적인 메모리공간※ 배열의 선언type  배열의 이름[배열의 크기];※ 배열의 필요성?배열은 같은 자료형(데이터) 여러 개를 메모리 공간에 저장해야 할 때개수가 많아지면,  int a1, a2,a3 · · · · · · · · · · an; 까지 n번 선언해 줘야 하지만, 배열을 쓰면 int a[n]; 처럼 간단하게 선언할 수 있다.15
배열이란?※ 배열의 초기화배열을 선언할 때, 배열의 초기 값을 넣어준다.
왼쪽부터 차례대로 배열에 저장된다.type배열의 이름[배열의 크기] = {배열의 초기값};배열의 크기가 주어지지 않아도,  배열의 초기값이 주어져 있으면, 컴파일러가배열의 초기값의 개수만큼 메모리를 잡아준다.예) int a[] = {1,2,3,4,5};  (O)   -컴파일-int a[5] = {1,2,3,4,5}; ※ 잘못된 배열의 초기화int a[3] = {1,2,3,4,5};  (X)      ------inta[5] = {1,2,3,4,5};int n=5; int a[n];  (X)              ------   #define n 5inta[n];int a[];   (X)16
배열이란?※ 배열의 size선언된 type 의 크기 * 배열의 개수sizeof(arr) = sizeof(type) * n※ 배열의 개수n = sizeof(arr) / sizeof(type); ※ 배열의 접근배열의 이름[접근할 index]type으로 선언된 변수처럼 사용17
배열이란?intiarr[5];charcarr[5];1 (iarr[0])0012FF10A (carr[0])0012FF104byte1byte2 (iarr[1])0012FF14B (carr[1])0012FF113 (iarr[2])0012FF18C (carr[2])0012FF124 (iarr[3])0012FF1CD (carr[3])0012FF135 (iarr[4])0012FF20E (carr[4])0012FF1418
그렇다면 혹시?메모리 모양을 보면, 다차원포인터와 배열의 모양이 비슷하다.그렇다면 혹시? 배열에서도 포인터의 가·감산 연산으로 접근할 수 있을까?※ 또 다른 배열의 접근법?*(배열의 이름 + 접근index) = 배열의 이름[접근index]배열은 메모리에 원소가 연속적으로 저장되어 있으므로,  주소의 가·감산 연산을하여 index번째 원소의 주소로 접근할 수 있고, *연산자를 사용하여 값에 접근할 수 있다.※ 배열의 접근배열의 이름  =  배열의 시작주소배열의 이름 + index = 배열의 시작주소 + sizeof(type) * index*(배열의 이름 + index )=배열의 이름[index]19
배열이란?※ 배열의 포인터 접근배열의 이름 +index배열의 index 번째 주소 값*(배열의 이름 +index)  배열의 index 번째 주소가 가르키는 값20charcarr[5];intiarr[5];A (carr[0])0012FF100012FF201 (iarr[0])0012FF100012FF00+1B (carr[1])0012FF21+12 (iarr[1])0012FF04+2C (carr[2])0012FF22+23 (iarr[2])0012FF08+3D (carr[3])0012FF23+34 (iarr[3])0012FF0C+4E (carr[4])0012FF24+45 (iarr[4])0012FF0F
3-2 다차원 배열21
다차원 배열이란?※ 다차원 배열[]를 여러 개 사용해서 만들 수 있다.
일차원 배열이 배열의 형태로 연속하게 존재하므로 다차원 배열이라 부른다.※ 다차원 배열의 선언type  배열의 이름[배열의 크기] [배열의 크기] ········· [배열의 크기];※ 다차원 배열과 배열의 차이?다차원 배열과배열은 컴퓨터에게 차이가 없다. 그러나 다차원 배열은 프로그래머가 좀 더 편하게 프로그래밍 할 수 있도록 해준다.22
다차원 배열이란?※ 다차원 배열의 접근배열의 이름[접근할 index][접근할index]type으로 선언된 변수처럼 사용23carr[0] 이라는 배열과,carr[1] 이라는 배열이 또 배열형태로 존재한다. charcarr1[5];charcarr2[2][3];A (carr1[0])0012FF100012FF20A (carr2[0][0])0012FF100012FF00carr[0] 배열B (carr1[1])0012FF21B (carr2[0][1])0012FF01C (carr1[2])0012FF22C (carr2[0][2])0012FF02D (carr1[3])0012FF23D (carr2[1][0])0012FF03carr[1] 배열E (carr1[4])0012FF24E (carr2[1][1])0012FF04E (carr1[5])E (carr2[1][2])0012FF250012FF05
무슨 말이야?※일차원 배열의 일차원 배열carr2[2][3] 을 예로 들어 보자.24carr2의 원소carr[0] 과 carr[1]은 일차원 배열이다. carr2는 일차원 배열이다. carr2[0]의 대표값carr2의 대표값carr2[0]0012FF000012FF00(carr2[0])[0]0012FF01(carr2[0])[1]0012FF02(carr2[0])[2]0012FF03carr2[1]0012FF03(carr2[1])[0]0012FF04(carr2[1])[1]0012FF05(carr2[1])[2]carr2[1]의 대표값
다차원 배열이란?다차원 배열이 일차원 배열의 배열이라면?  일차원배열처럼 메모리에 연속으로 위치할 것이다. 그렇다면?※ 또 다른 배열의 접근법?*(*(배열의 이름 + 접근index) + 접근index) = 배열의 이름[접근index][접근index]다차원 배열도 메모리에 연속으로 저장되어 있으므로,  주소의 가·감산 연산으로 index번째의 원소의 메모리 주소에 접근할 수 있고, *연산자를 이용하여, 값에 접근할 수 있다. 이 과정을 반복하면 다차원 배열 원소에 주소 가 · 감산과  *연산자로 접근할 수 있다.※ 배열의 접근배열의 이름  =  배열의 시작주소*(· · *(배열의 이름 + index ) · · )= 배열의 시작주소 + sizeof(type) * index * · · *index*(· · *( 배열의 이름 + index ) · · )=배열의 이름[index] · · ·[index]25
다차원 배열이란?※ 다차원 배열의 접근배열의 이름[접근할 index][접근할index]type으로 선언된 변수처럼 사용26charcarr[2][3];A (carr[0][0])0012FF100012FF20carr[0] 배열carr[0]의 대표값B (carr[0][1])0012FF21C (carr[0][2])0012FF22carr[1]의 대표값D (carr[1][0])0012FF23carr[1] 배열E (carr[1][1])0012FF24E (carr[1][2])0012FF25
대표값?※ 다차원 배열의 대표값carr의  대표값은 carr의 시작주소, carr[0]과 carr[1]도 일차원 배열이므로,  두 원소의 대표값도carr[0]과 carr[1]의 시작 주소이다.27carr의 대표값charcarr[2][3];A (carr[0][0])0012FF100012FF20carr[0] 배열carr[0]의 대표값B (carr[0][1])0012FF21C (carr[0][2])0012FF22carr[1]의 대표값D (carr[1][0])0012FF23carr[1] 배열E (carr[1][1])0012FF24E (carr[1][2])0012FF25
size?※ 다차원 배열의 size다차원 배열이, 일차원 배열의 원소가 일차원 배열이 되는 구조라면, size는 어떻게 될까?sizeof(carr) = sizeof(carr[0])*2sizeof(carr[0]) = sizeof(carr[0][0])*3sizeof(carr[0][0]) = sizeof(char) = 128charcarr[2][3];carr[0] 배열의 sizeA (carr[0][0])0012FF100012FF20carr[0]의 대표값B (carr[0][1])0012FF21carr배열의 sizeC (carr[0][2])0012FF22carr[1]의 대표값carr[1] 배열의 sizeD (carr[1][0])0012FF23E (carr[1][1])0012FF24E (carr[1][2])0012FF25
3-3 다차원 주소의 의미29
다차원 주소?※ 다차원 주소 모든 주소는 의미를 가진다. 앞 장에서 봤듯이 배열의 이름은 배열의 대표값 즉 배열의 시작 주소이다. 그렇다면 배열은 포인터?!?! (4장)
모든 주소는 가·감산 연산이 가능하다.
그렇다면 다차원 배열은 다차원 주소?!?! 다차원 배열이 다차원 주소라면 주소 가·감산 연산이 가능하므로 포인터 가·감산 연산이 가능하게 된다. ※ 주소의 가·감산이 뭐였더라?2-3장에서 배운 포인터 가·감산에서 언급했지만, 복습해보자.주소의 가·감산은  주소에 i를 더하거나 뺀다고 하면, 주소에 정수 i를 더하거나 빼면 의미가 없다. 그러므로 컴파일러가 1을 sizeof(type)*i로 바꾸어 의미있는 주소로 바꿔준다. 30p + i -> p + sizeof(T) x ip - i -> p - sizeof(T) x i(if the type of p is T*.)
2차원 배열의 주소 가·감산※2차원 배열의 주소 가·감산31
2차원 배열의 주소 가·감산※2차원 배열의 주소 가·감산carr+1= carr+sizeof(*carr)*1carr[0]+1= carr[0]+sizeof(*carr[0])*1carr[1]+1= carr[1]+sizeof(*carr[1])*132carr의 대표값charcarr[2][3];A (carr[0][0])0012FF100012FF20carr[0]의 대표값carr[0]+1= carr[0]+sizeof(*carr[0])*1B (carr[0][1])0012FF21carr+1= carr+sizeof(*carr)*1C (carr[0][2])0012FF22carr[1]의 대표값D (carr[1][0])0012FF23carr[1]+1= carr[1]+sizeof(*carr[1])*1E (carr[1][1])0012FF24E (carr[1][2])0012FF25
2차원 배열 주소로 접근33charcarr[2][3];A (carr[0][0])0012FF100012FF20B (carr[0][1])0012FF21C (carr[0][2])0012FF22D (carr[1][0])0012FF23E (carr[1][1])0012FF24E (carr[1][2])0012FF25

포인터와 배열

  • 1.
    C 포인터 –2장 포인터2010년 1월 25일김요셉1
  • 2.
  • 3.
    포인터란?※ 포인터 변수 주소를 저장하기 위한 메모리공간
  • 4.
    변수의 주소를 저장하는변수※ 포인터 변수의 선언type *포인터 변수;※ 포인터 변수의 Value포인터 변수가 갖는 값 (Value)은 주소이다.이 때, 이주소에는 포인터 변수가 선언된 type과 같은 type으로 선언된 값이어야 한다.포인터 변수 = &변수;3
  • 5.
    *연산자, &연산자※*연산자operand :대표값이 주소인 수식이나 변수
  • 6.
    *operand : operand에 저장된 주소에 저장된 값 ※&연산자operand : 변수,포인터 변수
  • 7.
    &operand: operand 가메모리 에 저장된시작주소 &변수변수 포인터변수포인터 변수 = &변수*포인터 변수4
  • 8.
  • 9.
  • 10.
  • 11.
    다차원 포인터란?※ 다차원포인터 변수 포인터 변수의 주소를 저장하는포인터 변수※ 다차원 포인터 변수의 선언type **포인터 변수; -> 2차원type ***포인터 변수; -> 3차원npppnppnpn
  • 12.
    다차원 포인터란?Memorynppp (0012FF10)0012FF040012FF050012FF060012FF07npp(0012FF1C)0012FF100012FF110012FF120012FF130012FF1Cnp (0012FF28)0012FF1D0012FF1E0012FF1Fn (20)0012FF280012FF290012FF2A0012FF2B9
  • 13.
  • 14.
    포인터의 덧셈/뺄셈 연산포인터의덧셈 및 뺄셈주소의 증가 및 감소오른쪽 예제에서는sizeof( int)=4이므로 4씩 증가 또는 감소된다.주의포인터의 곱셈, 나눗셈은 존재하지 않는다.p + i -> p + sizeof(T) x ip - i -> p - sizeof(T) x i(if the type of p is T*.)- 4+ 4
  • 15.
    다차원 포인터의 덧셈/뺄셈연산다차원 포인터다차원 포인터에서 type은저장된 값의 타입은 포인터이므로, 포인터는 32bit 컴퓨터에서 4byte 이므로, 4씩 증가 감소된다.cpp (0012FF1C)0012FF100012FF110012FF120012FF13+10012FF1Ccp (0012FF2B)cp + 1 -> cp + sizeof(char) x 1 cpp + 1 -> cpp + sizeof(char*) x 1(if the type of p is T*.)0012FF1D0012FF1E0012FF1F0012FF20+10012FF2Bc (41)0012FF2C
  • 16.
    C 포인터 –3장 배열2010년 1월 25일김요셉13
  • 17.
  • 18.
    배열이란?※ 배열 같은자료형(데이터)의 연속적인 메모리공간※ 배열의 선언type 배열의 이름[배열의 크기];※ 배열의 필요성?배열은 같은 자료형(데이터) 여러 개를 메모리 공간에 저장해야 할 때개수가 많아지면, int a1, a2,a3 · · · · · · · · · · an; 까지 n번 선언해 줘야 하지만, 배열을 쓰면 int a[n]; 처럼 간단하게 선언할 수 있다.15
  • 19.
    배열이란?※ 배열의 초기화배열을선언할 때, 배열의 초기 값을 넣어준다.
  • 20.
    왼쪽부터 차례대로 배열에저장된다.type배열의 이름[배열의 크기] = {배열의 초기값};배열의 크기가 주어지지 않아도, 배열의 초기값이 주어져 있으면, 컴파일러가배열의 초기값의 개수만큼 메모리를 잡아준다.예) int a[] = {1,2,3,4,5}; (O) -컴파일-int a[5] = {1,2,3,4,5}; ※ 잘못된 배열의 초기화int a[3] = {1,2,3,4,5}; (X) ------inta[5] = {1,2,3,4,5};int n=5; int a[n]; (X) ------ #define n 5inta[n];int a[]; (X)16
  • 21.
    배열이란?※ 배열의 size선언된type 의 크기 * 배열의 개수sizeof(arr) = sizeof(type) * n※ 배열의 개수n = sizeof(arr) / sizeof(type); ※ 배열의 접근배열의 이름[접근할 index]type으로 선언된 변수처럼 사용17
  • 22.
    배열이란?intiarr[5];charcarr[5];1 (iarr[0])0012FF10A (carr[0])0012FF104byte1byte2(iarr[1])0012FF14B (carr[1])0012FF113 (iarr[2])0012FF18C (carr[2])0012FF124 (iarr[3])0012FF1CD (carr[3])0012FF135 (iarr[4])0012FF20E (carr[4])0012FF1418
  • 23.
    그렇다면 혹시?메모리 모양을보면, 다차원포인터와 배열의 모양이 비슷하다.그렇다면 혹시? 배열에서도 포인터의 가·감산 연산으로 접근할 수 있을까?※ 또 다른 배열의 접근법?*(배열의 이름 + 접근index) = 배열의 이름[접근index]배열은 메모리에 원소가 연속적으로 저장되어 있으므로, 주소의 가·감산 연산을하여 index번째 원소의 주소로 접근할 수 있고, *연산자를 사용하여 값에 접근할 수 있다.※ 배열의 접근배열의 이름 = 배열의 시작주소배열의 이름 + index = 배열의 시작주소 + sizeof(type) * index*(배열의 이름 + index )=배열의 이름[index]19
  • 24.
    배열이란?※ 배열의 포인터접근배열의 이름 +index배열의 index 번째 주소 값*(배열의 이름 +index) 배열의 index 번째 주소가 가르키는 값20charcarr[5];intiarr[5];A (carr[0])0012FF100012FF201 (iarr[0])0012FF100012FF00+1B (carr[1])0012FF21+12 (iarr[1])0012FF04+2C (carr[2])0012FF22+23 (iarr[2])0012FF08+3D (carr[3])0012FF23+34 (iarr[3])0012FF0C+4E (carr[4])0012FF24+45 (iarr[4])0012FF0F
  • 25.
  • 26.
    다차원 배열이란?※ 다차원배열[]를 여러 개 사용해서 만들 수 있다.
  • 27.
    일차원 배열이 배열의형태로 연속하게 존재하므로 다차원 배열이라 부른다.※ 다차원 배열의 선언type 배열의 이름[배열의 크기] [배열의 크기] ········· [배열의 크기];※ 다차원 배열과 배열의 차이?다차원 배열과배열은 컴퓨터에게 차이가 없다. 그러나 다차원 배열은 프로그래머가 좀 더 편하게 프로그래밍 할 수 있도록 해준다.22
  • 28.
    다차원 배열이란?※ 다차원배열의 접근배열의 이름[접근할 index][접근할index]type으로 선언된 변수처럼 사용23carr[0] 이라는 배열과,carr[1] 이라는 배열이 또 배열형태로 존재한다. charcarr1[5];charcarr2[2][3];A (carr1[0])0012FF100012FF20A (carr2[0][0])0012FF100012FF00carr[0] 배열B (carr1[1])0012FF21B (carr2[0][1])0012FF01C (carr1[2])0012FF22C (carr2[0][2])0012FF02D (carr1[3])0012FF23D (carr2[1][0])0012FF03carr[1] 배열E (carr1[4])0012FF24E (carr2[1][1])0012FF04E (carr1[5])E (carr2[1][2])0012FF250012FF05
  • 29.
    무슨 말이야?※일차원 배열의일차원 배열carr2[2][3] 을 예로 들어 보자.24carr2의 원소carr[0] 과 carr[1]은 일차원 배열이다. carr2는 일차원 배열이다. carr2[0]의 대표값carr2의 대표값carr2[0]0012FF000012FF00(carr2[0])[0]0012FF01(carr2[0])[1]0012FF02(carr2[0])[2]0012FF03carr2[1]0012FF03(carr2[1])[0]0012FF04(carr2[1])[1]0012FF05(carr2[1])[2]carr2[1]의 대표값
  • 30.
    다차원 배열이란?다차원 배열이일차원 배열의 배열이라면? 일차원배열처럼 메모리에 연속으로 위치할 것이다. 그렇다면?※ 또 다른 배열의 접근법?*(*(배열의 이름 + 접근index) + 접근index) = 배열의 이름[접근index][접근index]다차원 배열도 메모리에 연속으로 저장되어 있으므로, 주소의 가·감산 연산으로 index번째의 원소의 메모리 주소에 접근할 수 있고, *연산자를 이용하여, 값에 접근할 수 있다. 이 과정을 반복하면 다차원 배열 원소에 주소 가 · 감산과 *연산자로 접근할 수 있다.※ 배열의 접근배열의 이름 = 배열의 시작주소*(· · *(배열의 이름 + index ) · · )= 배열의 시작주소 + sizeof(type) * index * · · *index*(· · *( 배열의 이름 + index ) · · )=배열의 이름[index] · · ·[index]25
  • 31.
    다차원 배열이란?※ 다차원배열의 접근배열의 이름[접근할 index][접근할index]type으로 선언된 변수처럼 사용26charcarr[2][3];A (carr[0][0])0012FF100012FF20carr[0] 배열carr[0]의 대표값B (carr[0][1])0012FF21C (carr[0][2])0012FF22carr[1]의 대표값D (carr[1][0])0012FF23carr[1] 배열E (carr[1][1])0012FF24E (carr[1][2])0012FF25
  • 32.
    대표값?※ 다차원 배열의대표값carr의 대표값은 carr의 시작주소, carr[0]과 carr[1]도 일차원 배열이므로, 두 원소의 대표값도carr[0]과 carr[1]의 시작 주소이다.27carr의 대표값charcarr[2][3];A (carr[0][0])0012FF100012FF20carr[0] 배열carr[0]의 대표값B (carr[0][1])0012FF21C (carr[0][2])0012FF22carr[1]의 대표값D (carr[1][0])0012FF23carr[1] 배열E (carr[1][1])0012FF24E (carr[1][2])0012FF25
  • 33.
    size?※ 다차원 배열의size다차원 배열이, 일차원 배열의 원소가 일차원 배열이 되는 구조라면, size는 어떻게 될까?sizeof(carr) = sizeof(carr[0])*2sizeof(carr[0]) = sizeof(carr[0][0])*3sizeof(carr[0][0]) = sizeof(char) = 128charcarr[2][3];carr[0] 배열의 sizeA (carr[0][0])0012FF100012FF20carr[0]의 대표값B (carr[0][1])0012FF21carr배열의 sizeC (carr[0][2])0012FF22carr[1]의 대표값carr[1] 배열의 sizeD (carr[1][0])0012FF23E (carr[1][1])0012FF24E (carr[1][2])0012FF25
  • 34.
  • 35.
    다차원 주소?※ 다차원주소 모든 주소는 의미를 가진다. 앞 장에서 봤듯이 배열의 이름은 배열의 대표값 즉 배열의 시작 주소이다. 그렇다면 배열은 포인터?!?! (4장)
  • 36.
    모든 주소는 가·감산연산이 가능하다.
  • 37.
    그렇다면 다차원 배열은다차원 주소?!?! 다차원 배열이 다차원 주소라면 주소 가·감산 연산이 가능하므로 포인터 가·감산 연산이 가능하게 된다. ※ 주소의 가·감산이 뭐였더라?2-3장에서 배운 포인터 가·감산에서 언급했지만, 복습해보자.주소의 가·감산은 주소에 i를 더하거나 뺀다고 하면, 주소에 정수 i를 더하거나 빼면 의미가 없다. 그러므로 컴파일러가 1을 sizeof(type)*i로 바꾸어 의미있는 주소로 바꿔준다. 30p + i -> p + sizeof(T) x ip - i -> p - sizeof(T) x i(if the type of p is T*.)
  • 38.
    2차원 배열의 주소가·감산※2차원 배열의 주소 가·감산31
  • 39.
    2차원 배열의 주소가·감산※2차원 배열의 주소 가·감산carr+1= carr+sizeof(*carr)*1carr[0]+1= carr[0]+sizeof(*carr[0])*1carr[1]+1= carr[1]+sizeof(*carr[1])*132carr의 대표값charcarr[2][3];A (carr[0][0])0012FF100012FF20carr[0]의 대표값carr[0]+1= carr[0]+sizeof(*carr[0])*1B (carr[0][1])0012FF21carr+1= carr+sizeof(*carr)*1C (carr[0][2])0012FF22carr[1]의 대표값D (carr[1][0])0012FF23carr[1]+1= carr[1]+sizeof(*carr[1])*1E (carr[1][1])0012FF24E (carr[1][2])0012FF25
  • 40.
    2차원 배열 주소로접근33charcarr[2][3];A (carr[0][0])0012FF100012FF20B (carr[0][1])0012FF21C (carr[0][2])0012FF22D (carr[1][0])0012FF23E (carr[1][1])0012FF24E (carr[1][2])0012FF25
  • 41.
    3차원 배열의 주소접근※ 주소 가·감산을 이용해보자34
  • 42.
    3차원 배열 주소로접근35intiarr3[2][3][2];1 (iarr3[0][0][0])0012FF1012FEFC12FF002 (iarr3[0][0][1])12FF043 (iarr3[0][1][0])12FF084 (iarr3[0][1][1])12FF0C5 (iarr3[0][2][0])12FF106 (iarr3[0][2][1])0012FF1012FF147 (iarr3[1][0][0])12FF188 (iarr3[1][0][1])12FF1C9 (iarr3[1][1][0])12FF2010 iarr3[1][1][1])12FF2411(iarr3[1][2][0])12FF2812(iarr3[1][2][1])
  • 43.
    3-4 배열 요소에접근하기36
  • 44.
    배열 요소에 접근해보자※배열 요소 접근하기 앞의 부제 3-3에서 배열을 주소로 접근하였다.
  • 45.
    * 연산자를사용하면 operand의 주소값에 있는 값을 나타낼 수 있다.
  • 46.
    배열의 원소를 주소를이용하여 접근하고 *연산자를 사용하여 출력할 수 있다.※*연산자가 뭐였더라?operand : 대표값이 주소인 변수나 수식
  • 47.
    *operand : operand에 저장된주소에 저장된 값이 된다.37
  • 48.
  • 49.
    3차원 배열 요소로접근39intiarr3[2][3][2];1 (iarr3[0][0][0])0012FF1012FEFC12FF002 (iarr3[0][0][1])12FF043 (iarr3[0][1][0])12FF084 (iarr3[0][1][1])12FF0C5 (iarr3[0][2][0])12FF106 (iarr3[0][2][1])0012FF1012FF147 (iarr3[1][0][0])12FF188 (iarr3[1][0][1])12FF1C9 (iarr3[1][1][0])12FF2010 iarr3[1][1][1])12FF2411(iarr3[1][2][0])12FF2812(iarr3[1][2][1])
  • 50.
    3차원 배열의 요소접근※3차원 배열을 상수를 더하여 출력해보자40