배열이름이 주소값을 가진다는 것은 맞는데, 단순히 배열이름=주소값 이 전부라고 생각하면 안된다. 어떤 변수 a가 있을 때 변수a의 타입도 같이 생각해 주어야 한다. 프로그래밍을 할 때는(특히 C언어에서) 항상 너가 선언해서 사용하는 변수의 타입도 같이 고려해주어야 한다. 예를 들어 char a 를 선언했다고 할 경우, 변수 a의 타입은 char 이고, &a의 타입은 포인터가 되는거야.. 그러니까 sizeof(a)는 1이 나오고, sizeof(&a) 할 때는 4가 나오는거야. 그럼 int a[10]을 선언했다고 하면 어떻게 될까? 변수 a의 타입은???? int를 10개 저장할 수 있는 배열이 타입형이 되는거야. 쉽게 써서 int[10] 이 타입형이 되는 거라고...
ㅎㅎ(58.72)2012-12-24 13:51
a의 타입은 int[10] 이 되는거고, a[0] 의 타입은 int 인거고, &a와 &a[0]의 타입은 포인터(정확히 말하면 주소값)가 되는거겠지. sizeof를 하면 타입형에 맞는 크기가 나오게 되는거야. 컴파일이 될 때 단순히 a라는 변수에 주소값만 들어가는게 아니라 여러가지 정보가 함께 저장이 되고 그중에 타입형도 같이 저장이 되는 거고, 너가 sizeof 연산자를 사용할 때 이러한 정보가 같이 고려가 되서 결과가 나오게 되는 거야.
ㅎㅎ(58.72)2012-12-24 13:57
마지막으로 한가지만 더 이야기 할께.. 함수에 넘겨주어서 sizeof 하면 4가 나온다는데 이것도 타입형을 고려해주면 쉬워.. 함수를 void func(int a[]) 또는 void func(int *a) 처럼 선언해서 sizeof를 사용하면 당연히 4가 나오게 되겠지.. 왜냐하면 타입이 포인터이기 때문에... 그런데 void func(int a[10]) 으로 선언해서 sizeof를 사용하면 40 이 나오겠지... 왜냐하면 함수안에서 a의 타입은 int[10] 이 되기 때문에 말야... 하지만 실전에서는 void func(int a[10]) 이런 식으로는 잘 사용하지 않지... 암튼 말이 길어졌네... 이해하는데 도움이 되었기를 바란다. 열심히 공부해서 훌륭한 프로그래머가 되기를...
ㅇ
니생각에 sizeof가 함수 같으냐? char tt[40];printf(\"%d, %d\\n\", sizeof( (char*)tt), sizeof tt);
sizeof는 연산자임. 나도 잘못 알았음
array to pointer decay라고 부름.
배열이름이 주소값을 가진다는 것은 맞는데, 단순히 배열이름=주소값 이 전부라고 생각하면 안된다. 어떤 변수 a가 있을 때 변수a의 타입도 같이 생각해 주어야 한다. 프로그래밍을 할 때는(특히 C언어에서) 항상 너가 선언해서 사용하는 변수의 타입도 같이 고려해주어야 한다. 예를 들어 char a 를 선언했다고 할 경우, 변수 a의 타입은 char 이고, &a의 타입은 포인터가 되는거야.. 그러니까 sizeof(a)는 1이 나오고, sizeof(&a) 할 때는 4가 나오는거야. 그럼 int a[10]을 선언했다고 하면 어떻게 될까? 변수 a의 타입은???? int를 10개 저장할 수 있는 배열이 타입형이 되는거야. 쉽게 써서 int[10] 이 타입형이 되는 거라고...
a의 타입은 int[10] 이 되는거고, a[0] 의 타입은 int 인거고, &a와 &a[0]의 타입은 포인터(정확히 말하면 주소값)가 되는거겠지. sizeof를 하면 타입형에 맞는 크기가 나오게 되는거야. 컴파일이 될 때 단순히 a라는 변수에 주소값만 들어가는게 아니라 여러가지 정보가 함께 저장이 되고 그중에 타입형도 같이 저장이 되는 거고, 너가 sizeof 연산자를 사용할 때 이러한 정보가 같이 고려가 되서 결과가 나오게 되는 거야.
마지막으로 한가지만 더 이야기 할께.. 함수에 넘겨주어서 sizeof 하면 4가 나온다는데 이것도 타입형을 고려해주면 쉬워.. 함수를 void func(int a[]) 또는 void func(int *a) 처럼 선언해서 sizeof를 사용하면 당연히 4가 나오게 되겠지.. 왜냐하면 타입이 포인터이기 때문에... 그런데 void func(int a[10]) 으로 선언해서 sizeof를 사용하면 40 이 나오겠지... 왜냐하면 함수안에서 a의 타입은 int[10] 이 되기 때문에 말야... 하지만 실전에서는 void func(int a[10]) 이런 식으로는 잘 사용하지 않지... 암튼 말이 길어졌네... 이해하는데 도움이 되었기를 바란다. 열심히 공부해서 훌륭한 프로그래머가 되기를...