인수를 배열로 받을때 질문입니다.
글쓴이: jhugestar / 작성시간: 월, 2005/07/11 - 3:42오후
#include <iostream>
void encoding(char star[])
{
cout << sizeof(star) <<" "<< star <<endl;
}
int main()
{
char star[] = "0123456789";
cout << sizeof(star) <<" " << star <<endl;
encoding(star);
}
====
위의 코드의 결과값이
11 0123456789
4 0123456789
이렇게 나옵니다만
encoding 함수내에서 star의 사이즈가 4로 나오는건 어캐 해석해야하나요?
선언은 배열로 해도 결국 포인터로 인식되는건가요??
구체적인 이유를 알고 싶습니다.
답변 부탁드립니다 (__)
Forums:
C에서 일반적으로 array와 pointer는 다른 것이지만, 다음과 같
C에서 일반적으로 array와 pointer는 다른 것이지만, 다음과 같은 경우에 array를 pointer로 다룬다고 합니다.
1. expression안에 array 이름이 나올 때, array 이름은 array의 첫번째 요소를 가리키는 pointer로 처리한다.
2. array의 첨자는 pointer에 offset을 취한 것과 동일하다.
3. 함수 인자로 선언된 array는 그 array의 첫번째 요소를 가리키는 pointer로 처리한다.
님이 보여주신 예제에서 encoding()이란 함수의 인자로 char[]를 선언하셨더라도 3번 규칙에 의해 컴파일러는 이것을 char *로 처리하므로 그 크기를 구하면 4가 나오는 것으로 이해할 수 있습니다.
Re: 인수를 배열로 받을때 질문입니다.
배열은 상수 포인터입니다... :)
오랫동안 꿈을 그리는 사람은 그 꿈을 닮아간다...
http://mytears.org ~(~_~)~
나 한줄기 바람처럼..
Re: 인수를 배열로 받을때 질문입니다.
배열은 그저 배열이라고 알고 있습니다.
agrumpy님 말씀이 정확합니다.
일반적으로 array와 pointer 는 형이 다릅니다.
C++, 그리고 C++....
죽어도 C++
[url=http://www.cinsk.org/cfaqs/html/nod
C FAQs 6.3
C FAQ: http://www.eskimo.com/~scs/C-faq/top.html
Korean Ver: http://cinsk.github.io/cfaqs/
cinsk 님Q.6.19 에 보면[C9X]는 가변 크기 배
cinsk 님
Q.6.19 에 보면
[C9X]는 가변 크기 배열을 제공하며, [C9X] 확장 기능을 제공하는 컴파일러가 널리 퍼지게 되면, 이 방법이 가장 바람직한 방법이 될 수 있을 것입니다. (GCC는 이미 가변 크기 배열을 제공합니다.)
라고 되어 있는데 이건 무슨 의미인가요?
여기서 말하는
'이 방법' 이 무엇을 말하는지 모르겠습니다
개념없는 초딩들은 좋은 말로 할때 DC나 웃대가서 놀아라. 응?
[quote="girneter"]Q.6.19 에 보면[C9X]는
읽어보지 않았으나 C99에서 지원하는 가변 크기 배열은 다음을 말하는 것 같습니다.
----------------------------------------
http://moim.at
http://mkhq.co.kr
[quote="girneter"]여기서 말하는 '이 방법' 이 무엇을 말
가변 길이 배열(variable length array)를 뜻하는 것입니다. 예를 들면
[quote="doldori"] 예를 들면[code:1]doubl
오.. 이거 신기하네요.
좋은 정보 감사합니다
개념없는 초딩들은 좋은 말로 할때 DC나 웃대가서 놀아라. 응?
Re: 인수를 배열로 받을때 질문입니다.
[quote="정태영
배열은 상수 포인터입니다... :)
제가 이상하게 생각했던점은
main 에서는 sizeof(star) 에서 4가 아닌 12로 나왔고
이것은 star 라는것이 포인터 상수임에도 불구하고
sizeof연산자의 경우에는 예외적으로 배열자체로 인식하기 때문이라고 알고 있습니다.
따라서 제가 생각하기로는
encoding 함수 내에서도 똑같은 이유로 배열명 자체는 포인터일지라도 선언을 배열로 하였기 때문에 sizeof 시에 배열의 크기가 나와야할것이라고 생각했는데요.
이경우를 어떻게 해석해야 하나요;;
Re: 인수를 배열로 받을때 질문입니다.
이런 이유로 배열을 포인터 상수라고 설명하는 것은 모순을 낳게 됩니다. 위에서
ixevexi님이 지적하셨듯이 배열과 포인터는 *전혀* 다른 형입니다.
main()에서 star가 배열이건 포인터이건 상관없이 encoding() 내에서 star는
항상 포인터이기 때문입니다.
댓글 달기