에서 함수에 구조체를 전달 -나는 다음과 같은 경우 C
struct foo
{
int a;
int *b;
} bar;
void baz(struct foo qux)
{
}
있습니까 권리 bar
의 로컬 복사본에 bar
baz()
에 결과를 전달하는 스택으로 푸시되고 있다는 생각에 나는? 그렇다면 어떤 종류의 사본입니까? C++에서는 복사 생성자 또는 기본 복사 생성자를 호출한다고 가정하지만 C에서 이것이 어떻게 작동하는지 실제로 알지 못합니다.
C에 기본 복사 생성자의 개념이 있으며 이름? 깊은 사본을 수행하기 위해 뭔가를 할 수 있습니까? (가상으로). 내가 생각할 수있는 유일한 방법은 사실 깊은 복사를 한 다음 함수에 전달하는 것입니다.
일반적으로 나는 포인터를 foo
에 전달할 것이지만 어떻게 작동하는지 궁금 할 것입니다. 또한 포인터를 전달하는 것이 더 빠르며 메모리를 절약하고 이런 종류의 작업을 수행 할 때 취할 수있는 권장 조치라고 생각합니다. 나는 그것이 얕은 복사라고 생각할 것이다. 이것이 바뀔 수 있습니까?
p.s. C에는 생성자 자체가 없습니다. C++에서만. C에서 데이터 구조는 단순히 바이트 단위로 복사됩니다. –
@EdwardFalk : 물론, 사실 나는 초기화가 아닌 건설에 대해 이야기했습니다. 또한 "byte-for-byte"것은 표준에 의해 지정되지 않습니다. 실제로는 이름이 지정된 필드 만 복사 할 수 있습니다 ("초기화 후에도 구조체 개체의 명명되지 않은 멤버가 불확정 값을가집니다.", C99 §6.7 .8 ¶9) - 즉, 패딩은 복사되거나 복사되지 않을 수 있습니다. –
큰 설명, 필요한 경우 전체 복사본을 수행하기 위해 기본 동작을 재정의 할 수 없다고 추측합니다. – chrisw