2016-10-17 2 views
-3

C에서 구조체를 변환하는 f (예 : struct s1) 함수를 만들고 싶다고합시다.C에서 구조체를 수정하는 관례적인 모범 사례가 있습니까?

은/수신 함수 f에 더 있는지 여부를 통해 현대적인 C 모범 사례/숙어가 구조체에 복사합니다 구조체 대의포인터이 돌아 있습니까?

예를 들어, 여기에 f에 대한 몇 가지 가능한 유형의 서명이다 (그리고 나는 내가 부족 것을 더있을거야) : 일반적으로

struct s1 f(struct s1) 
struct* s1 f(struct* s1) 
void f(struct *s1) 

명 이들 중 일부에서 멀리 조종하려고 할 서명 대 다른 사람?

+0

구조의 크기와 의도가 복사를 할 것인지 또는 단순히 구조 내의 일부 값을 수정하는지 여부에 따라 다릅니다. – user3386109

답변

1

마지막 부분은 관용적입니다.

사람들은 일반적으로 높은 수준의 언어가 아닌 C를 사용하고 있기 때문에 효율성이 높습니다. 포인터를 전달하면 스택에서 전체 구조를 푸는 것보다 빠릅니다. 제자리에서 구조를 수정하는 것은 사본을 가져 와서 힙 메모리를 할당하고 반환하는 것보다 훨씬 빠릅니다. 또한 C는 얕은 사본과 깊은 구분을위한 좋은 방법이 없기 때문에 복사 방법은 포인터 구성원에게 어떤 일이 일어나는지에 대한 질문을 이끌어냅니다.

그러나 실제 C 코드에서 세 가지 방법 모두를 볼 수 있습니다.

1

전 복제에 대한 질문은 의도에 달려 있다고 생각합니다. 복제 및 복제 변경은 원본 수정과 매우 다릅니다. 그래서 # 1을 배제합니다.

원본을 수정하는 경우 마지막 서명을 선택합니다. 이 구조체가 원래 구조체에서 작동한다는 것은 명백합니다. 두 번째 구조체는 복제가 될 수도 있고 아닙니다. 구조체에 대한 포인터를 반환한다는 점에서 명확하지 않습니다.

관련 문제