2017-09-19 3 views
-1

나는 c의 함수에 배열을 전달하는 동안 그것을 알고 싶었다. 패스를 얻는 배열 값 또는 전달 된 배열 주소 (참조)의 복사본입니까?배열이 c의 함수에 전달 될 때 전달되는 것은 무엇입니까? 배열 값 또는 참조 주소 복사?

+0

배열을 C의 함수에 전달할 때 첫 번째 변수의 주소가 전달됩니다. – VatsalSura

+0

함수에 전달 된 배열은 첫 번째 요소에 대한 포인터로 감소합니다. –

+0

배열의 기본 주소가 전달됩니다. – Rafal

답변

0

전달할 배열 값 또는 전달 된 배열 주소 (참조)의 복사본입니까?

기술적으로, . C 함수에서 인수는 항상 값에 의해 전달됩니다. 배열 (변수)의 경우 함수 인수로 전달되는 동안 배열의 첫 번째 요소에 대한 포인터로 쇠퇴합니다. 평소와 같이 포인터가 값에 의해 전달됩니다.

그러나 다른 모든 포인터 유형 인수와 마찬가지로 호출 된 함수에서 포인터가 가리키는 값 (또는 포인터 연산을 통해 파생 포인터 인 경우 유효한 범위 내에있는 한)을 변경하는 경우 호출자 함수 내부의 실제 배열 요소 값도 영향을받습니다. 배열은 내재적 인 예에 대해 지적되어으로 감쇠 함수의 인수로서 건네

1

char * foo(char buffer[]) 
{ 
printf("sizeof buff= %d",buffer); // here you will get pointer size not original buf because buffer is decay to pointer as char *buffer 

} 

int main() 
{ 
char buf[10]="hello"; 
foo(buf); 

} 

는 포인터 붕괴 이유 이유 시간 .IT이 모든 요소를 ​​복사하는 데 더 많은 비용이다 배열을 호출하는 함수 매개 변수에 전달합니다. 그래서 암묵적으로 포인터로 쇠퇴합니다.

관련 문제