목차
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코드마케팅, 장단점, 사례, 마케팅 시사점
소개글