1. ホーム
  2. c

[解決済み] 構造体は何が特別なのか?

2023-06-12 23:09:41

質問

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;
}

どのように解決するのですか?

同じ質問をするのによりよい方法は、「配列の何が特別なのか」ということです。 struct s.

ポインタによる配列の受け渡しの動作は、C言語の最初の実装にまでさかのぼります。配列はポインタに対してquot;decay"し、特にこの言語を初めて使う人々の間ではかなりの混乱を引き起こしました。一方、構造体は、組み込み型と同じように振る舞います。 int s, double など。の中に埋め込まれた配列も含まれます。 struct を除いて フレキシブル配列のメンバ のように、コピーされない。