2차원 배열과 포인터
본 자료는 8페이지 의 미리보기를 제공합니다. 이미지를 클릭하여 주세요.
닫기
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
해당 자료는 8페이지 까지만 미리보기를 제공합니다.
8페이지 이후부터 다운로드 후 확인할 수 있습니다.

소개글

2차원 배열과 포인터에 대한 보고서 자료입니다.

목차

1.이것만 알면 만사 OK
2. 기본
3. 배열 포인터 정의
4. 2차원 배열과 2차원 배열 포인터 변수 연결
5. 2차원 배열 기본 다지기
6. Imsip = imsi
7. Int imsi[2][3]의 모든것
8. 함수 인자 포인터
9. 2차원 포인터 다루기
10. 2차원 포인터 이것만은 알아두자
11. int(*imsi)[2], int*temp[2]의 차이
12. *temp[3]에서 temp의 의미는?

본문내용

비교 분석
int imsi[3][2] = {{3,5},{12,54},{534,923}};
int (*imsip)[2];
imsip = imsi;

1) printf("%#010x, %d\n", imsip, sizeof(imsip)); //0x0012ff68 4 imsi
2) printf("%#010x, %d\n", imsip+1, sizeof(imsip+1)); //0x0012ff70 4 imsi+1
3) printf("%#010x, %d\n", imsip+2, sizeof(imsip+2)); //0x0012ff78 4 imsi+2

4) printf("%#010x, %d\n", *imsip, sizeof(*imsip)); //0x0012ff68 8 imsi[0]
5) printf("%#010x, %d\n", *(imsip+1), sizeof(*(imsip+1))); //0x0012ff70 8 imsi[1]
6) printf("%#010x, %d\n", *(imsip+2), sizeof(*(imsip+2))); //0x0012ff78 8 imsi[2]

7) printf("%d, %d\n", **imsip, sizeof(**imsip)); // 3 4 imsi[0][0]
8) printf("%d, %d\n", *(*imsip+1), sizeof(*(*imsip+1))); // 5 4 imsi[0][1]
9) printf("%d, %d\n", *(*(imsip+1)), sizeof(*(*(imsip+1)))); // 12 4 imsi[1][0]
10) printf("%d, %d\n", *(*(imsip+1)+1), sizeof(*(*(imsip+1)+1))); // 54 4 imsi[1][1]
11) printf("%d, %d\n", *(*(imsip+2)), sizeof(*(*(imsip+2)))); // 534 4 imsi[2][0]
12) printf("%d, %d\n", *(*(imsip+2)+1), sizeof(*(*(imsip+2)+1))); // 923 4 imsi[2][1]

“*” 별표 하나는 대괄호 하나에 해당한다

1), 2), 3)번 분석
(imsip + 상수) imsip == 주소 , 상수 == 행 순서

1,2,3)번과 4,5,6)번 분석
(imsip + 상수)는 상수 번째 행을 가르키며 그 크기는 단지 주소의 크기 = 4byte
*(imsip + 상수)는 상수 번째 행을 가르키며 그 크기는 행 전체(2열) = 8byte

4,5,6)번과 7~12)번 분석
*(imsip + 상수)는 “행에 대한 대상체”
*(*(imsip + 상수)+상수)는 “배열 요소”임
크기는 모두 4byte
각 상수가 의미하는 배열 요소의 위치를 가르킴

2차원 배열 첨자는 열의 개수이다

(*imsip)[상수] 에서 상수의 의미

생략 불가능, 행의 개수는 지정할 필요 없음
열의 개수

열의 개수를 지정하고 행의 개수를 생략하는 이유

int imsi[ ][ ] = {{10},{32,64},{53,62}}일때
Int imsi[3][ ] = {{10},{32,64},{53,62}}은 열의 개수를 알 수가 없음
Int imsi[ ][3] = {{10},{32,64},{53,62}}은 첫번째 행에 배열요소2개 생략
Int imsi[ ][4] = {{10},{32,64},{53,62}}은 첫번째 행에 배열요소 3개 생략

행의 숫자를 생략해도 열의 개수를 적으면 추측 가능하기 때문에


1) imsip가 가르키는 것은 imsi[0][0]의 주소 이외의 다른 의미는 없음
imsip == &imsi[0][0]

imsip + i (가능)  주소+(4 X 상수)  4byte
imsip[i] +j (불가능)  i의 의미는 행의 순번을 나타냄
(imsip + i) + j (불가능)  ``

2) 2차원배열 표현 가능  뇌의 학대 초래!!
만약 int imsi[50][30] = {..........};
int *imsip = &imsi[0][0]; 일때

27행 19열값을 나타낼려고한다

printf(“%d\n”, );

결론 – 2차원 배열은 2차원 배열 포인터변수로 받아야 한다


#include

main()
{
int imsi[3][2] = {{3, 5}, {12, 54}, {534, 923}};
int (*imsip)[2];
int *temp[3];

imsip = imsi; // 1
imsip = &imsi[0][0]; // 2

temp[0] = imsi; // 3
temp[0] = imsi[0]; // 4
temp[1] = imsi[1]; // 5
temp[2] = imsi[2]; // 6

temp[0] = *(imsi + 0); // 7
temp[1] = *(imsi + 1); // 8
temp[2] = *(imsi + 2); // 9

*temp = imsi[0]; //10
*(temp + 0) = imsi[0]; //11
*(temp + 1) = imsi[1]; //12
*(temp + 2) = imsi[2]; //13

*temp = *imsi; //14
*(temp + 0) = *(imsi + 0); //15
*(temp + 1) = *(imsi + 1); //16
*(temp + 2) = *(imsi + 2); //17

틀린 이유

2) imsip = &imsi[0][0]
imsip는 2차원 배열 포인터 변수로써 주소값이 들어 가야함
&imsi[0][0]은 1차원 배열의 주소

만약 위에서
(*imsip)[2] 대신에 *imsip를 넣었다면
위의 식은 맞는 문장이다

3) temp[0] = imsi;
temp[0]은 1차원 배열 포인터 변수로써 주소값이 들어가야 함
imsi 는 모 배열로써 2차원 배열을 가르킴

만약 위에서
imsi[3][2] 대신에 imsi[3]을 넣었다면
위의 식은 맞는 문장이다

키워드

  • 가격3,000
  • 페이지수24페이지
  • 등록일2004.07.06
  • 저작시기2004.07
  • 파일형식파워포인트(ppt)
  • 자료번호#259595
본 자료는 최근 2주간 다운받은 회원이 없습니다.
청소해
다운로드 장바구니