itsource

구조물의 특별한 점은 무엇입니까?

mycopycode 2022. 9. 14. 22:28
반응형

구조물의 특별한 점은 무엇입니까?

C에서는 함수에서 어레이를 반환할 수 없지만 어레이로의 포인터는 반환할 수 있습니다.하지만 나는 무엇이 특별한지 알고 싶다.structs어레이가 포함되어 있어도 기능별로 반환할 수 있습니다.

왜?struct래핑은 다음 프로그램을 유효하게 합니까?

#include <stdio.h>

struct data {
    char buf[256];
};

struct data Foo(const char *buf);

int main(void)
{
    struct data obj;
    obj = Foo("This is a sentence.");
    printf("%s\n", obj.buf);
    return 0;
}

struct data Foo(const char *buf)
{
    struct data X;
    strcpy(X.buf, buf);
    return X;
}

같은 질문을 하는 더 좋은 방법은 어레이에 특별한 조작이 부가되어 있는 어레이이기 때문에 어레이의 특별한 점은 무엇입니까?structs.

포인터로 배열을 전달 및 반환하는 동작은 C의 원래 구현으로 거슬러 올라갑니다.배열은 포인터에 대해 "감쇠"하여 특히 언어를 처음 접하는 사람들 사이에서 상당한 혼란을 일으킵니다.반면 구조는 다음과 같은 기본 제공 유형과 동일하게 작동합니다.ints,doubles 등. 여기에는 에 내장되어 있는 어레이가 포함됩니다.struct(복사되지 않는 유연한 어레이 멤버 제외)

우선 인용하자면C11§ 6.8.6.4,return스테이트먼트, (내 것을 포함)

만약 a가return식이 있는 문이 실행되고 식의 이 함수 호출식의 값으로 발신자에게 반환됩니다.

구조변수를 반환하는 것은 구조값이 반환되기 때문에 가능합니다(정확합니다).이는 모든 기본 데이터 유형을 반환하는 것과 유사합니다(반환).int예를 들어)를 참조해 주세요.

한편, 어레이를 반환하는 경우는,return <array_name>는 기본적으로NOTE 어레이의 첫 번째 요소의 주소를 반환합니다.이 주소는 어레이가 호출된 함수에 대해 로컬일 경우 발신측에서 비활성화됩니다.따라서 이러한 방법으로 어레이를 반환할 수 없습니다.

그래서 TL;DR, 특별한 건 없어요.structs, 어레이에 특기가 있습니다.


주의:

견적C11다시, 제6.3.2.1장 (의 강조점)

피연산자의 피연산자일 때를 제외하고sizeof오퍼레이터,_Alignof연산자 또는 단항&operator 또는 배열 초기화에 사용되는 문자열 리터럴입니다.유형 "array of type"을 가진 표현식은 배열 객체의 초기 요소를 가리키며 l값이 아닌 "type" 유형을 가진 표현식으로 변환됩니다. [...]

특별한 것은 없다struct유형: 어레이 유형에는 특별한 점이 있어 함수에서 직접 반환할 수 없습니다.

A struct표현은 다른 비배열 유형의 표현과 같이 취급됩니다.이 표현식은 이 값의 으로 평가됩니다.struct 이런 도 할 수

struct foo { ... };

struct foo func( void )
{
  struct foo someFoo;
  ...
  return someFoo;
}

.someFoo가치에 따라 평가하다struct fooobject: 객체의 내용이 함수에서 반환됩니다(해당 내용에 배열이 포함되어 있는 경우에도).

됩니다.이 식이 피연산자가 아닌 경우sizeof 단항식&하기 위해 은 " of " of "에서 .T "to "to "to "to "to "T 이 은 첫

따라서 배열 식에 대한 참조는 자동으로 포인터 값으로 변환되므로 함수에서 값별로 배열을 반환할 수 없습니다.

구조체는 기본적으로 데이터 구성원을 공개하므로 구조체의 경우 기본적으로 데이터에 액세스할 수 있지만 클래스에는 액세스할 수 없습니다.그래서 구조 래핑은 유효합니다.

언급URL : https://stackoverflow.com/questions/36872230/what-is-special-about-structs

반응형