오늘 저는 두 친구에게 C 사용법을 가르치고있었습니다 struct
. 당신이를 반환 할 수 있다면 그 중 하나가 물었다 struct
"아니 당신은 동적으로의 포인터 반환 것! 내가 대답되는 함수에서 malloc
에드struct
대신 합니다."
주로 C ++을 수행하는 사람에게서 왔으므로 struct
값으로 s 를 반환 할 수 없을 것으로 기대 했습니다. C ++에서는 operator =
객체에 과부하를 가할 수 있으며 객체를 값으로 반환하는 기능을 갖는 것이 좋습니다. 그러나 C에서는 옵션이 없으므로 컴파일러가 실제로하는 일을 생각하게했습니다. 다음을 고려하세요:
struct MyObj{
double x, y;
};
struct MyObj foo(){
struct MyObj a;
a.x = 10;
a.y = 10;
return a;
}
int main () {
struct MyObj a;
a = foo(); // This DOES work
struct b = a; // This does not work
return 0;
}
왜 struct b = a;
작동하지 않아야 하는지 이해 operator =
합니다. 데이터 유형에 과부하가 걸리지 않습니다 . a = foo();
잘 컴파일 되는 방법은 무엇입니까? 다른 의미 struct b = a;
입니까? 어쩌면 물어볼 질문은 다음 return
과 같습니다.=
서명 하는가?
[편집] : 좋아, 방금 지적한 struct b = a
것은 구문 오류입니다. 맞습니다. 그리고 저는 바보입니다! 그러나 그것은 훨씬 더 복잡합니다! 사용 struct MyObj b = a
은 실제로 작동합니다! 내가 여기서 무엇을 놓치고 있습니까?
struct MyObj b = a;
작동하는 것 같습니다 :)
struct b = a;
구문 오류입니다. 시도하면 어떻게struct MyObj b = a;
되나요?