C 基本講座

関数から構造体を返す

LinkedInラーニングの無料トライアルを今すぐ試そう

無料で視聴する すべての加入プランを見る
このレッスンでは、関数から構造体を返す方法について説明します。
講師:
05:23

字幕

このレッスンでは関数から構造体を返す方法について説明します。このプログラムは student 型の構造体の変数2個と配列を初期化し、それを pritnf で表示しています。まずは実行してみましょう。実行するとこのように初期化したメンバーを表示します。このプログラムに構造体のメンバーをクリアする関数を追加してみましょう。まずクリアした構造体をreturn 文で返すstudent clear1 関数を追加してみます。関数の定義をこのように記述します。そして、プロトタイプ宣言を記述し、main 関数から呼び出してみます。実行してみます。このような結果を表示しました。この student clear1 関数はローカル変数で宣言したstudent 型の変数 s のメンバーをクリアし、それを return 文で返却しています。return するのはstudent 型の変数ですから返却値型もstudent 型になります。student clear1 関数はmain 関数から呼び出されますが、main 関数ではこのように関数の返却値を構造体の変数 s1 に代入しています。つまり、この s と s1 と別々のオブジェクトでメモリ上には2つの構造体の実態が用意されることになります。 返却値を受け取ってswitch をこのように表示するとクリアされていることが確認できます。では次に構造体のポインタを受け取るstudent clear2 関数を追加しましょう。構造体もアドレスを渡すことができますがアドレスを渡すと構造体へのポインタを使って間接的に値を返すことができます。まず student clear2 関数の定義を記述します。そしてプロトタイプ宣言を記述します。最後にこのように呼び出してみます。実行してみましょう。このような結果を表示しました。student clear1 関数の方は畳んでおきます。この student clear2 関数は返却値を使わずに引数で渡されたこのポインタの指す構造体をこの s2 ですね。これをポインタを使って間接参照してクリアしています。student clear1 関数のほうはreturn で返却する構造体とそれを受け取る構造体の2つがメモリ上に存在しましたが、この student clear2 関数ではmain 関数で用意する構造体の実態だけがメモリ上に存在します。この s2 だけが存在することになります。構造体は1つ1つが大きなオブジェクトとなるので関数の引数や返却値に値を指定すると処理上のオーバーヘッドが増します。 ですから関数で利用するのにはこの例のように一般的にポインタを使います。また、return 文では1つの構造体しか返却できませんが、ポインタを使うと配列のアドレスを渡すことで複数の構造体を1度に返却したのと同じことができます。では渡された構造体の配列のメンバーをすべて初期化するstudent clear3 関数を追加してみましょう。では student clear3 関数の定義を記述します。ここは畳んでおきましょう。次にプロトタイプ宣言を記述します。そして main 関数から呼び出してみましょう。実行してみます。このような結果が表示されています。この student clear3 関数ではstudent 型の配列のアドレスとそして要素数を受け取ります。そしてこのポインタを使って渡された配列の要素を要素数ぶんループで回しながら1つずつクリアしていきます。このように配列のアドレスを渡すことで関数側で構造体の配列を操作することができるようになります。このレッスンでは関数から構造体を返す方法について説明しました。

C 基本講座

C言語はUNIXというOSを記述するために開発されたプログラミング言語で、組み込みシステムの開発を中心に今も使われています。このコースでは簡単なプログラムを作成しながら、C言語の基本的な文法を学びます。データ型や制御文などの基礎的な文法からポインタや構造体といったC言語の特徴的な内容まで幅広く取り上げます。よく使われる標準ライブラリ関数も数多く紹介します。

5時間45分 (60 ビデオ)
現在、カスタマーレビューはありません…
ソフトウェア・トピック
プラン加入者限定
発売日:2017年11月05日

このコースは、「オンデマンド」でご利用可能であり、ダウンロードすることもオンラインで見ることもできます。

ダウンロードすると、オフラインでコースを使用し、豊富なインターフェースをフルに活用できます。複数のデバイスを使用したり、 一度に全コースをダウンロードしたくない場合は、アカントにログインして、ストリーミング・ビデオとしてコースのレッスンを視聴してください。

ビデオトレーニングをお楽しみいただけますように! お問い合わせは、cs-jp@lynda.com宛までご連絡ください。