2차원배열에 대해서 질문입니다
베이비슈
질문 제목 : 질문 내용 :
예를들어 2차원 배열 char name[3][10] 이라는 것이 있을 때
아래 코드에서 name[0], name[1], name[2]의 값과 &name[0], &name[1], &name[2]의 값을 출력해보았을 때
각각 같은 값들이 나오는데요
그럼 name[]과 &name[]의 차이는 무엇인가요?? 둘다 그냥 똑같은건가요??
-----------------------------------------------------------------------------
소스코드
#include stdio.h
int main(void) {
char name[3][10] = {사과, 바나나, 메론};
int i;
for(i=0 ; i3 ; i++) {
printf(name[%d] = %d\n,i,name[i]);
}
for(i=0 ; i3 ; i++) {
printf(&name[%d] = %d\n,i,&name[i]);
}
return 0;
}
-
꺆잉
name[1] 의 자료형은 char[10] 이고,
&name[1] 의 자료형은 char(*)[10] 입니다.
name[1] 의 자료형은 char 10 개 묶음이고,
여기에 & 을 붙였으니 너무도 당연하게...
&name[1] 의 자료형은 char 10 개 묶음이 저장된 메모리의 주소(포인터) 입니다. -
방방
주소값은 같게 나오겠지만, 의미하는 바가 다릅니다.
name[1] : *(name + 1) 과 같고, 이는 1번 행을 가리키는 것으로 1번행은 int[10] 개짜리 배열이죠.
그러므로, sizeof(name[1]) 을 하게 되면 sizeof(char) * 10(한 행의 열 갯수) 결과가 나옵니다.
&name[1] : &(*(name + 1)) == &*(name + 1), 여기서 &*는 서로 상쇄되어 사라지고, name + 1 만 남습니다.