
こんばんは。現在C言語を学んでいます。
課題という形で構造体で定義されたデータを関数の引数に当てはめ、データを渡すという処理を行わねばならぬのですが、関数を利用しての構造体の受け渡しが分からず苦戦しております。ご助言頂ければ幸いです。
分かりづらいかとは思いますが下記が私が簡単にですが作ったものとなります。
私の考えている動作プロットとしては
1. 構造体の形式を定義する。
2. 冒頭にて存在する関数を定義
3. main関数内にて構造体に名前を付けて定義し、値を入力より受付
4. do_it_hoge関数に構造体を引数として与え(ここが分からず)関数を呼び出す。
5. 関数内にて引数で受け取った &hoge.a,b,c等を表示するなどしたい。(受け取る方法が分からず)
関数を呼ぶ際にカッコ内に入れるのは構造体の名前のみで良いのでしょうか? (例: do_it_hoge(hoge); のように)
また呼び出される関数側の括弧は何を記述するのでしょうか?
いつもならint hogehoge, や char hoge, などと宣言しているかと思うのですが。
読みづらく、分かりにくいものかとは思いますが
どうぞ宜しくご教授頂ければと思っております。
構造体を触るのが久しぶりだったのでそちらでミスがあるかもしれません。もし何か補足等必要でしたらメッセージ頂ければ返事させていただきたいと思います。
//----------------------------------------------------------------//
//構造体HOGEHOGE定義
//----------------------------------------------------------------//
typedef struct tagHOGEHOGE {
int a,b;
int c;
}HOGEHOGE;
void do_it_hoge();//関数定義。ここでのカッコ内の定義も不明
//----------------------------------------------------------------//
// main
//----------------------------------------------------------------//
void main(){
HOGEHOGE hoge;//hogeをHOGEHOGE利用で定義
scanf("%d,%d",&hoge.a,&hoge.b);//カンマ区切りで代入
scanf("%d",&hoge.c);//数値をhoge.cへ
do_it_hoge();//←ここが分からず
}
//----------------------------------------------------------------//
// do_it_hoge 関数。構造体を引数で受け取りたい関数。
//----------------------------------------------------------------//
void do_it_hoge(){ // ←括弧内の受け方が分からず
// ここでmainで入力された &hoge.aなどを参照して表示したい
// 例: printf("hogeA:%d",&hoge.a);
}
//----------------------------------------------------------------//
No.1ベストアンサー
- 回答日時:
普通、アドレス渡しでなんとかするかと。
こんな感じ:#include <stdio.h>
typedef struct { int a,b; char *m; } Hoge_t;
void do_it_hoge( Hoge_t *h ){
printf( "Hoge: %d %d '%s'\n", h->a, h->b, h->m );
}
int main( int c, char *v[] ){
Hoge_t hoge = { 1,2, "hoge hoge" };
do_it_hoge( &hoge );
}
ここらへん基本なので、入門書とか読み直してみては。
No.5
- 回答日時:
>#4さん
>値渡しとアドレス渡しの二種類の方法があります。
いわゆる「アドレス渡し」は結局のところ
「アドレス」という「値」を渡しています。
C言語における引数の渡し方には「値渡し」だけが存在し、
いわゆる「アドレス渡し」は「値渡し」の一部であると考えるのがよいでしょう。
No.4
- 回答日時:
値渡しとアドレス渡しの二種類の方法があります。
http://www9.plala.or.jp/sgwr-t/c/sec15-4.html
が丁寧に説明されていると思うので、参考にしてください。
~上記URLより引用
【値渡し】
引数の独立性が保たれ安全なプログラムになりますが、
対象となる構造体の内容をすべてコピーするため、大きな構造体では
無駄な時間が多くなります。
【アドレス渡し】
構造体をコピーすることなく、構造体のアドレスを引数で渡すため、
サイズの大きな構造体を渡すときには値渡しより効率的です。
No.3
- 回答日時:
全然難しくないですよ。
int a;
とやればint型のaが宣言できるのと同じで、
HOGEHOGE a;
とやれば、HOGEHOGE型のaが宣言できます。
ですから、それを引数に取る関数の宣言は
void fugafuga(HOGEHOGE a)
{
で、それを呼ぶには
HOGEHOGE a;
fugafuga(a);
です。
No.2
- 回答日時:
>// ここでmainで入力された &hoge.aなどを参照して表示したい
このコメントが間違いのもとです。
mainで入力したのは、hogeのメンバーa, b, cです。
これらのメンバーのアドレスを入力したのではありません。
do_it_hoge関数の中でhogeのメンバーを参照するだけなら、
何もhogeのアドレスを渡す必要はありません。hogeそのものを渡せばじゅうぶんです。
戻り値のないdo_it_hoge関数の中で、hogeのメンバーの中身を変更するのであれば、
do_it_hoge(&hoge);
のようにhogeのアドレスを渡す必要があります。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
今、見られている記事はコレ!
-
隣の枝がはみ出してきたら切ってもいい?最もやってはいけないことは?
「隣の木が越境してきて困るが、勝手に切ってはいけないと聞くし…」そう思っている方も多いだろう。実は、2023年4月1日に民法が改正され、この「越境枝」のルールが大きく変わった。 教えて!gooでも「境界から出て...
-
弁護士が解説!あなたの声を行政に届ける「パブリックコメント」制度のすべて
社会に対する意見や不満、疑問。それを発信する場所は、SNSやブログ、そしてニュースサイトのコメント欄など多岐にわたる。教えて!gooでも「ヤフコメ民について」というタイトルのトピックがあり、この投稿の通り、...
-
弁護士が語る「合法と違法を分けるオンラインカジノのシンプルな線引き」
「お金を賭けたら違法です」ーーこう答えたのは富士見坂法律事務所の井上義之弁護士。オンラインカジノが違法となるかどうかの基準は、このように非常にシンプルである。しかし2025年にはいって、違法賭博事件が相次...
-
釣りと密漁の違いは?知らなかったでは済まされない?事前にできることは?
知らなかったでは済まされないのが法律の世界であるが、全てを知ってから何かをするには少々手間がかかるし、最悪始めることすらできずに終わってしまうこともあり得る。教えてgooでも「釣りと密漁の境目はどこです...
-
カスハラとクレームの違いは?カスハラの法的責任は?企業がとるべき対応は?
東京都が、客からの迷惑行為などを称した「カスタマーハラスメント」、いわゆる「カスハラ」の防止を目的とした条例を、全国で初めて成立させた。条例に罰則はなく、2025年4月1日から施行される。 この動きは自治体...
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Vba Replace関数について教えて...
-
CSSが全く分かりません、お助け...
-
DLLファイルの逆コンパイラにつ...
-
バッチファイルで以下のような...
-
CPUが16bitでも32bitOSでコンパ...
-
gccを行ってもexeファイルが生...
-
c言語
-
VisualStudio2022でC言語プログ...
-
Windows Formアプリからコンソ...
-
visual studio 2022でのC#プロ...
-
C言語の関数のextern宣言
-
プログラマー達は何故、プログ...
-
PIC12F1822でLED調光器を作りたい
-
最初に聞かれたこと
-
C言語 関数、変数の宣言について
-
C言語について(初心者)
-
プログラミングc++を全く分か...
-
あってる
-
DNCL(共テ用プログラミング言語...
-
DNCL(共テ用プログラミング言語...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
HTTPSのとき":"が"%3A"ではなく...
-
ASP+アクセスでのSQLコメントに...
-
javascriptで文字挿入でtoggle...
-
同じ型【ハイフンと数字】だけ...
-
hoge の謎
-
Excel VBA の ChangeFileAccess
-
Boolean型配列中のTrueの有無を...
-
ボタンをクリックすると数が増...
-
【Jquery】changeイベント毎にa...
-
【正規表現】【javascript】CR...
-
confirmの連続?
-
ifreamをリロードしたい
-
Vb.netのグローバル変数の宣言...
-
バイナリファイルから文字列を...
-
構造体を引数で関数へ渡す
-
ひとつ上の階層にアクセスさせ...
-
JQueryの繰り返し処理が動かな...
-
複数ファイルで使うグローバル...
-
static constメンバ変数(配列)...
-
アンカーリンクをクリックさせ...
おすすめ情報