입니다. 제어기 또는 CPU의 누산기를 통해 리턴이 수행 될 수 없습니다.C의 함수에서 둘 이상의 값을 반환 할 수없는 이유는 무엇입니까? 이유는? 가능한 경우 둘 이상의 값을 반환하는 방법은
올바른 이유가 있습니까?
입니다. 제어기 또는 CPU의 누산기를 통해 리턴이 수행 될 수 없습니다.C의 함수에서 둘 이상의 값을 반환 할 수없는 이유는 무엇입니까? 이유는? 가능한 경우 둘 이상의 값을 반환하는 방법은
올바른 이유가 있습니까?
이것이 언어 정의 방법입니다. 근본적인 이유는 없습니다. 다른 언어는 여러 값 (예 : Matlab)을 반환 할 수 있습니다.
"해결 방법"으로 여러 필드가 들어있는 구조체를 반환 할 수 있습니다.
포인터를 전달하여 함수에서 수정할 수도 있습니다. –
우리는 변수의 수를 함수에 전달할 수 있고 변수는 스택에 공간을 생성합니다. 그럼 왜 우리는 여러 변수를 반환 할 수 없습니다. 스택 또는 일부 메모리에서 반환되는 경우? – kapilddit
@kapilddit : 언어가 정의 되었기 때문입니다. –
구조체에 넣으면 두 개 이상의 항목을 완전히 "반환"하거나 함수에 포인터를 전달하여 함수가 반환 된 후에도 계속 남아있는 값을 쓸 수 있습니다.
한 번에 둘 이상의 값을 반환 할 수 없습니다. 함수를 반환하는 구문은 하나의 값만 받아 들여야하는 방식으로 정의되기 때문입니다. 아래의 예를 확인하십시오. 위의 경우
a=returnfunction();
returnfunction 함수()는 두 개 이상의 값을 반환하면
는 다음 컴파일러는 변수 (A)에 값을 리턴하는 초기화하는 혼란 얻는다. 함수 returnfunction()이 두 개의 값 1과 2를 반환하면 컴파일러는 값 1 또는 2를 변수 a에 할당하는 것을 혼동합니다. 따라서 이러한 유형의 문제를 방지하기 위해 함수는 둘 이상의 값을 반환하지 않는 방식으로 정의됩니다.표현 방법과는 반대로 실제로 값은 반환되지 않습니다. 사실 반환 값/주소는 스택에서 함수 호출에 대한 인수로 전달됩니다. 그런 다음 return 문은 실제로 해당 인수를 수정하여 결과를 호출자에게 전달합니다. 어떤 의미에서
, 그것은 거의 같은 void func(arg1, arg2, *ret)
다른 언어가 다른이를 처리합니다. C는 스택에서 하나의 "return"인수 만 예상합니다. 실제로 구조체는 여러 값을 "반환"하게하므로 구조체에 대한 포인터를 일반적인 인수로 전달할 수도 있습니다.
현대의 CPU/ABI가 그게 사실입니까? – Austin
그게 무슨 뜻입니까? – SLaks
여러 값을 반환하는 데 제한이있는 이유는 무엇입니까? – kapilddit
두 개 이상의 값을 반환하는 것은 무엇을 의미할까요? –