목차
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의 의미는?
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]을 넣었다면
위의 식은 맞는 문장이다
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]을 넣었다면
위의 식은 맞는 문장이다
추천자료
- c언어와 마방진
- 피아제의 보존개념 실험보고서
- [C언어]프로그래밍(C언어)에 대한 PPT자료
- 문학작품의 영화화 - 희곡'이'와 영화'왕의 남자'
- Photonic crystal (광결정)
- 구조체를 이용한 학생 성적 프로그램만들기
- [알고리즘] Dijkstra 알고리즘 프로그래밍
- 컴퓨터 Data & 연산의 이해
- 나노재료 구조 분석
- 이미지 처리 툴 박스의 기본기
- [건축] 대공간 구조의 방식에 관하여
- QR 코드의 유래, 정의, 특징, QR 코드 만들기, 활용, 사례, 변화, 특징, 현황, 관리, 역할, ...
- VSEPR 모델에 의한 분자의 3차원 구조
- 소비자행동론,QR코드마케팅, 장단점, 사례, 마케팅 시사점
소개글