모르는게 있어서 이렇게 글을 남겨요~
질문 역시 포인터에 관한 질문이구요//소스
int a[3][2]={ {1,2},{3,4}, {5,6} };
printf(a[0] : %d \n, a[0]); --- 결과값 : 12345032
printf(*(a+0) : %d \n, *(a+0) ); --- 결과값 : 12345032
여기에서 왜 a[0]과 *(a+0)의 결과값이
주소값이 가르치는 요소의 값을 나타내야하는게 아닌가요?
왜 주소값이 출력되나요?? 궁금하군요
위의 소스에 연결되어서
printf(%d, %d \n, a[1][0], (*(a+1))[0]); --- 출력값 : 3, 3이렇게 요소의 값이 나타나야 정상아닌가요???
꼭 도와주세요~~ plz
새해에는 건강하시고 좋은 일만 가득하시길 빕니다.
한란 2026.01.17
전혀 허접하지 않으신것 같습니다. ㅎㅎ
애교 2026.01.17
즉 a[3]을 말하면 a의 시작주소값(5000번지) + (4byte*3)12byte =5012번지를 찾아가라는 의미이지요,
*간접연산자는 주소값을 가라키는 기억장소로 찾아가라는 의미이고요,,, 허접하지만 도움됐으면 합니다..
집1어치워 2026.01.17
예를 들어 int형 배열 a[5]가 선언되고 a[3]에 접근하려면 a에서 3번째 있는값이라 생각하는데 잘못된것입니다.
배열은 포인터라고 보셔야 합니다.. 몇번째가 아닌 byte계산을 해서 배열시작주소값과 더해 그주소값으로 접근하는것입니다.. 두서 없이 써서 지송요,, 배열은 포인터 입니다..
겨슬 2026.01.17
인식한다고 말했는데 a가 배열의 시작주소를 나타낸다면 a+1은 배열a의 2번째 주소값을 나타내고 여기서 *(a+1)은 배열 a의 2번째 주소에 있는 배열의 시작주소를 나타내게 되는것이지요,, 설명이 부족하내요,, 그림을 그려서 설명해주고 싶은데,, 쩝,,,, 한마디로 배열안 각요소에 배열이 있기 때문에 각요소에 접근하면 값이
아닌 중첩된?배열의 주소값이 찍히게 되는것이지요,, 글구 a[0]은 풀어서 이해하면 *(a+0) 같은 의미입니다.
배열이름이
외국녀 2026.01.17
늦게 적어 보실지 모르겠지만 허접하게나마 글을 남깁니다.. 2차원배열을 배울때 보통 행과열루 이루어진
구조로 배웁니다.. 사실 메모리에서 2차원배열은 행열구조가아닌 1차원배열로 인식하게 됩니다. 즉,, 1차원 배열의 각요소에 1차원 배열이 있는것으로 저장됩니다.. 한마디로 1열로 늘어선 모양으로 저장되는것이지요,
질문중에 a[0]은 왜 주소값을 나타내는지 궁금해 하시는것 같은데요, 1차원 배열에서는 이뜻은 기억장소를
나타내지만 2차원배열은 각행의 시작
계획자 2026.01.17
메모리는 그림을 그려서 생각하는게 제일 이해가빠르죠^^
배꽃 2026.01.17
a[1][0] 과 a[1] 의 차이를 생각해보세요.
int m[] = {1,2,3};
이었을 경우, m과 m[0] 의 차이부터 차근차근 생각해보시면;;;
한란 2026.01.17
배열을 그림으로 그려보시면 이해가 될 것 같은데요.