C言語関係掲示板

過去ログ

No.454.構造体を返却するプログラム

[戻る] [ホームページ]
No.3257

構造体についてよろしくお願いしますm(_ _)m
投稿者---PaPa(2002/10/31 11:31:48)


構造体を返す方法がわからなくなってしまいました。どうかおしえてください!
returnをつかうというのはわかるのですが...
↓自分で打ってみたプログラムの一部分なのです。
 構造体の各メンバに値を設定し、その構造体を返したいのですが、
 どうしたらいいのでしょうか?おねがいしますm(_ _)m

struct student
{
	char  name[20];
	int   height;
	float weight;
};

struct student setstudent(char name[], int height, float weight)
{
}


No.3258

Re:構造体についてよろしくお願いしますm(_ _)m
投稿者---TDa(2002/10/31 11:51:39)


#include <stdio.h>
#include <string.h>

struct student
{
	char  name[20];
	int   height;
	float weight;
};

struct student setstudent(char name[], int height, float weight)
{
    struct student s;

    strcpy(s.name, name);
    s.height = height;
    s.weight = weight;
    
    return s;
}

int main(void)
{
    struct student yamada;

    yamada = setstudent("山田", 170, 60);
    printf("%s: %d: %.1f\n", yamada.name, yamada.height, yamada.weight);
    
    return 0;
}


No.3263

Re:構造体についてよろしくお願いしますm(_ _)m
投稿者---PaPa(2002/10/31 17:29:33)


アドバイスありがとうございましたm(_ _)m
よく理解できました。

No.3260

Re:構造体についてよろしくお願いしますm(_ _)m
投稿者---かずま(2002/10/31 14:08:56)


> 構造体を返す方法がわからなくなってしまいました。
> returnをつかうというのはわかるのですが...

確かに関数は構造体を返すことが出来ます。
しかし、普通はそんなことはしません。

構造体は、サイズが大きいオブジェクトなので、代入したり、関数に引数と
して渡したり、関数から返してもらったりしないほうがよいのです。

どこか一箇所に実体があって、それを指すポインタをやりとりするのが
普通のやり方です。
#include <stdio.h>
#include <string.h>

typedef struct student {
    char  name[20];
    int   height;
    float weight;
} Student;

void setstudent(Student *s, const char *name, int height, float weight)
{
    strcpy(s->name, name);
    s->height = height;
    s->weight = weight;
}

void setStudents(Student *s, int n)
{
    static Student st[] = {
        { "安藤", 168, 65 }, 
        { "加藤", 180, 80 }, 
        { "近藤", 175, 70 }, 
        { "佐藤", 159, 90 }, 
    };
    memcpy(s, st, n * sizeof(Student));
}

int main(void)
{
    Student yamada, members[4];
    int i;

    setstudent(&yamada, "山田", 170, 60);
    printf("%s: %d, %.1f\n", yamada.name, yamada.height, yamada.weight);
    puts("---");    
    setStudents(members, 4);
    for (i = 0; i < 4; i++)
        printf("%s: %d, %.1f\n",
            members[i].name, members[i].height, members[i].weight);
    return 0;
}


No.3264

Re:構造体についてよろしくお願いしますm(_ _)m
投稿者---PaPa(2002/10/31 17:33:03)


アドバイス有り難うございましたm(_ _)m
まだよく理解できてないのですが、もっと勉強したいと思っております。