構造体を関数へ渡したい

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
Flime

構造体を関数へ渡したい

#1

投稿記事 by Flime » 16年前

またまた失礼します。
以下のように、3人分の体重を扱う構造体を、
メイン関数の中で作りましたが…。
void put(■■■){

	a[0].weight = 59.3;
	a[1].weight = 62.7;
	a[2].weight = 81.4;

}
int main(){

	int i;

	typedef struct {double weight;} person;
	person a[3];

	put(◆◆◆);

	printf("3人の体重は、それぞれ");
	for(i=0;i<3;i++)printf(" %d キログラム " , a.weight );
	printf("です。");
}




■■■の部分と、◆◆◆の部分には、何を書けばいいのでしょうか?
いろいろ試してみましたがどうもうまくいきません。
『 typedef struct {double weight;} person; 』この1行を、
メイン関数とput関数の外へと持っていくしかないのでしょうか?

SooA

Re:構造体を関数へ渡したい

#2

投稿記事 by SooA » 16年前

#include <stdio.h>

typedef struct {
	double weight;
} person;

void put( person *a ){
	a[0].weight = 59.3;
	a[1].weight = 62.7;
	a[2].weight = 81.4;
}

int main(){
	int i;

	person a[3];

	[color=red>put( &a[0] ) ;[/color]

	printf( "3人の体重は、それぞれ" ) ;
	for( i=0; i<3; i++ )
		[color=red>printf( "  %.1f キログラム  ", a.weight );[/color]

	printf( "です。" );
}

となるかな?
未確認ですので確認してください ^ ^;
ソース修正しました。

Flime

Re:構造体を関数へ渡したい

#3

投稿記事 by Flime » 16年前

素早い回答ありがとうございます。
%dではなく%lfでしたね(^^;)


やはり構造体をグローバルにするしかないのでしょうか?
なるべくグローバル変数は使いたくないのですが…。


わがままを言って申し訳ありません(><)

御津凪

Re:構造体を関数へ渡したい

#4

投稿記事 by 御津凪 » 16年前

> やはり構造体をグローバルにするしかないのでしょうか?
> なるべくグローバル変数は使いたくないのですが…。

構造体の宣言をグローバルにおいても、グローバル変数にはなりません。

ちょうど、 SooA さんのコードになります。
(グローバル変数は一切使っていませんよ)

SCI

Re:構造体を関数へ渡したい

#5

投稿記事 by SCI » 16年前

>%dではなく%lfでしたね(^^;)
%.1fと%lfは違いますよ。

>やはり構造体をグローバルにするしかないのでしょうか?
>なるべくグローバル変数は使いたくないのですが…。
構造体の「宣言」をグローバルにしても「定義」をローカルにすれば「グローバル変数」にはなりません。
ローカル宣言型にしたいということなら、その構造体を使うすべての関数がその型を知っている必要がありますね。
何が言いたいかというと、SooAさんのコードに「グローバル変数」はありません。

Flime

Re:構造体を関数へ渡したい

#6

投稿記事 by Flime » 16年前

なるほどなるほど、理解できました。

構造体の宣言をグローバルな場所に書いただけなので、
グローバル変数にはならない、ということですね。

%.1fに関しては、見間違えただけです…ごめんなさい。

お騒がせしました。ありがとうございましたm(_ _)m

閉鎖

“C言語何でも質問掲示板” へ戻る