int tarr[3][3] = { 1,2,3,4,5,6,7,8,9 };
int(*ptr)[2];
ptr = tarr;
for (int i = 0; i
printf("%d %d\n", ptr[i][0], ptr[i][1]);
return 0;
여기서 int(*ptr)[2]했을때 출력값은 1,2,3,4,5,6이고
int(*ptr)[3]하면 출력값이 1,2,4,5,7,8인데 이해를 못하겟어
int(*ptr)[2]가 int형 배열2개를 가리키고 포인터연산시 2칸씩 건너뛴다는데 2칸씩 건너뛰면 1,2, 4,5, 7,8 나와야대는거아니여?
[3]은 3칸씩 건너뛰면 1,2, 6,7 이렇게 나와야대고?
for (int i = 0; i ???
왜 짤렸지 i<3; i++임
i가 3보다 작고 i++
꺽쇠 졸라 짤리더라
int(*ptr)[2]로 했을때 ptr을 보면 ptr[0][0] = 1 ptr[0][1] = 2 ptr[1][0] = 3 ptr[1][1] = 4 ... ptr[4][0] = 9 ptr[4][1] = 초기화안된쓰레기값 으로 나온다.
int(*ptr)[2]가 int형 배열2개를 가리키고 포인터연산시 2칸씩 건너뛴다는데 2칸씩 건너뛰면 1,2, 4,5, 7,8 나와야대는거아니여? [3]은 3칸씩 건너뛰면 1,2, 6,7 이렇게 나와야대고? 이게 무슨 말인지 잘 안와닿네 흠..
이 댓글은 게시물 작성자가 삭제하였습니다.
이 댓글은 게시물 작성자가 삭제하였습니다.
너가 어떻게 이해를 하고 있는지 감이 잘 안오는데 본인이 생각하기에는 int(*ptr)[2]; ptr = tarr; 이렇게 하면 ptr에 값이 어떻게 들어가있을거라고 기대를 하고 있는거임?
tarr 주소값?
tarr 주소값이 들어가는건 맞음. 근데 tarr은 3*3 배열이잖아? 9개의 숫자를 3개씩 묶어서 생각한다는 말임 근데 int(*ptr)[2]는 숫자를 2개씩 묶어서 보니까 ptr에 tarr 주소값을 때려박아버리면 {1,2}{3,4}{5,6}{7,8}{9,?}로 들어가는거임 결국 2차원 배열이라는 것도 메모리상에는 1차원하고 똑같이 저장이 되니까 2개로 묶든 3개로 묶든 순차적으로 묶이는거임 저기서 만약 int *ptr = tarr 이라고 하면 ptr[5]가 6이 나오겠지
정리하면 첨에 3행3열로 배열을 선언해도 나중에 배열포인터로 []안에있는 숫자만큼 베열을 다시 만들수있다? 이런거임?
[3][3]으로 선언해도 포인터를 쓰기에 따라 1차원인거처럼 쓸 수도 있고 [5][2]배열처럼 쓸 수도 있고 [2][5] 배열처럼 쓸 수도 있다는 말임 [5][2]나 [2][5]처럼 쓰면 윗댓에 써놨듯이 마지막에 쓰레기값이 들어가있겠지
디버깅하면서 주소값이랑 할당된 값이랑 잘 보면서 생각해봐. 좀 더 이해가 잘 될거임
감사감사용
두칸씩 건너뛴다는건 무슨 의미로 하는지 이해가 안되네 글은 추상적으로 쓰지마
윤성우로 공뷰하는데 책에 글케 써져잇엇어
행을 건너뛴다는 얘기구나 {1,2,3,4,5,6,7,8,9 } [2]일 때의 0행 1행 3행 과 [3] 일때의 0행, 1행, 3행은 이 아래 댓글로 풀어 놨으니까 쉽게 이해 뒬꺼야
{ 1,2,3,4,5,6,7,8,9 } 이 배열을 int(*ptr)[2] 2개씩 나누면 0 행은 1, 2 1행은 3, 4 3행은 5, 6 4행은 7, 8 인데 3번 반복 하니까 1, 2, 3, 4, 5, 6 이 나오겠지
아 배열포인터가 []안에있는 숫자만큼 배열을 나눈다고생각하면됨?
정확히 이해했내 그렇게 생각하면 된다 다차원 배열을 행으로 나누려면 기준이 있어야 하잖아 {1,2,3,4,5,6,7,8,9} 몇 행으로 분류할것인지를 행에 포함될수 있는 원소가 몇개인지로 알려주면 컴파일러가 그걸 기준으로 행을 나눌수 있잖아
근데 arr[3][3]이라고 쓴 시점부터 3행3열로 나눈다고 컴파일러한테 가르처준거아니여?
arr[3][3] 은 배열이고 너는 (*parr) 을 이용하고 싶은거잖아 parr 로 접근할때 parr한테도 기준을 정해줘야지
{1,2,3,4,5,6,7,8,9} 이 있을때 arr 은[3][3] 을 기준 나눌수 있고 arr[9] 로 나눌수 있고 arr[2][5]로 나눌수 있겠지? 근데 이건 arr 이 배열을 관리하는 기준인거고 parr 은 {1,2,3,4,5,6,7,8,9} 의 시작번지만 받았을뿐 기준을 모르잖아 그러니 parr 에게도 기준을 설정해줘야 기준을 참고해서 행을 나누어서 관리하지
아 이해함 ㄱㅅㄱㅅ
성님 배열포인터인 ptr을 ptr[2][4] 이런식으로하면 어떻게되는거임 ? ptr[2][4]하고 printf로 ptr[0][3] 이런식으로 출력해보니까 값이 아니고 주소값같은게 나오던데
{ 1,2,3,4,5,6,7,8,9 } 이 배열을 3개씩 나누면 0 행은 1, 2, 3 1행은 4, 5,6 2행은 7, 8, 9 인데 출력구문이 ptr[i][0], ptr[i][1] 이거네? [0][0]==1 , [0][1] == 2 , [1][0] == 4, [1][1] == 5 2행은 [2][0]== 7 , [2][1] == 8 출력하면 1,2,4,5,7,8 이 나오겠지
0 행은 니가 알아서 1행으로 받아들이고 배열 인덱스 0 을 의미함을 받아들여라 이 정도는 충분히 할수 있잖아?
아 ㄱㅅㄱㅅ 집에가서 해볼게
마지막 질문인데 집에서 지금 해보고있거든 ? 1. 이게 다 1차원 배열로 인식하는거야? *ptr[2]로 나누고 출력할때 ptr[0][5] 이런식으로해도 인덱스 에러 안뜨고 6이 출력되던데 2. *ptr[2][4]이런식으로 하면 어떻게 적용되는거임? 첨에 2행4열배열로 나누어지나 해서 ptr[0][2] 이런식으로 출력해봤는데 주소값같은게 나오던데