2016-07-03 5 views
3

1) float scalar_product(float *x, float *y)2) float scalar_product(float x[], float y[])과 같습니까?함수 매개 변수에서 포인터 또는 배열 사용

일부 벡터가 포함 된 일부 float a[3], b[3];이 있는데이 함수는 저에게 스칼라 제품을 제공해야합니다.

내 자바 배경으로 나는 2) 함수 (종이에)를 썼다. 그러나 샘플 솔루션은 포인터로 1)을 사용했다.

그래서 내 질문 : 동일합니까? 그렇지 않다면 차이점은 무엇이며 언제 사용해야합니까?

+0

가독성 문제는 언제 사용해야합니까? 어떤 데이터가 전달되는지 구별하려면 두 번째 메소드 서명을 사용하십시오. 그러나 모든 의도와 목적을 위해, 그들은 동일합니다. –

+0

이것은 중복이어야합니다. – alk

+0

여기에 우리가 있습니다 : http://stackoverflow.com/q/16258075/694576 – alk

답변

2

예, 두 버전 모두 이 유효입니다. 왜냐하면 배열이 함수 인수로 전달되면 기본적으로 첫 번째 요소에 대한 포인터가 감소하기 때문입니다.

따라서 함수 매개 변수를 포인터 또는 배열로 지정하면 동작이 변경되지 않습니다.

관련, C11 장 §6.7.6.3, 기능 에 '정규화 포인터 조정한다

' '형식의 배열'같은 매개 변수의 선언을 선언시 타입 '은 [...]

그래서,이 float scalar_product(float x[], float y[])float scalar_product(float *x, float *y) 같은 되 버린다.