こんにちは､ そしてお帰りなさい｡
もうひとつのチャレンジをご紹介します｡
今回のチャレンジは､ 再び構造について考えてみたいと思います｡
ポインタを含む構造体の要素に親しむことができます｡
そのため､ その要素に対してメモリを確保する必要があります｡
また､ 構造体をポインタとして宣言することや､ 構造体をポインタとして関数に渡すことにも慣れることができるだろう｡
そのため､ 今回のチャレンジでは主に構造体とポインタを使用します｡
そこで､ 構造体ポインタを作成して関数に渡すcプログラムを作成する必要があります｡
以下のメンバを持つitemという名前の構造体を作成します｡
項目名（文字ポインタ）｡
量｡ int 型でなければならない｡
価格は浮動小数点､ 金額は浮動小数点であるべきです｡
構造体に格納される量は､ 基本的に数量に価格をかけたものが総量となるからだ｡
2つの関数を作ってほしい｡
パラメータとしてitem型の構造体ポインタを取るread
itemという名前の関数を作って欲しいのですが､ ポインタであるべきです｡
通常の構造体ではなく､ ポインタを引数に取る関数の利点は､
主に後方互換性があることです｡
以前のバージョンのcコンパイラは､ 構造体を扱えませんでした｡
また､ 関数にポインタを渡す場合､ すべての要素をコピーする必要がなく､
アドレスだけをコピーするので､ より速く､ より効率的です｡
そこで､ 構造体へのポインタをパラメータとする関数を用意することにします｡
この読み物で挑む｡
この関数がすべきことは､ ユーザーから商品名､
価格､ 数量または商品名を読み込むことです｡
右のコンテンツは､ 構造上､ 過去に格納されるべきである｡
そこに格納したい構造体へのポインタを渡しているわけです｡
print itemという名前の別の関数を作って欲しい｡
また､ item 型の構造体ポインタをパラメータとする｡
この関数は､ パラメータの内容を出力します｡
つまり､ printfsをいくつかやるだけなんですね｡
それはかなり基本的なことでしょう｡
main関数では､ 基本的にポインタ構造体の項目を宣言するか､
項目と構造体のポインタを宣言して､ 項目のポイントに項目のアドレスを代入したいからです｡
そして､ 項目名ポインタ用のメモリも確保する必要があります｡
つまり､ 構造体内部の項目名要素は文字ポインティングであり､ その分メモリを確保しなければならないことを覚えておいてください｡
文字配列だったら､ そんなことする必要ないんだけどね｡
しかし､ ある要素を文字ポインタとして持っているとき､ そのポインタの値である実際のアドレスのためのメモリを作るだけであることを忘れないでください｡
指し示すもののメモリが作れない｡
だから､ リテラルの定数を代入すれば､ メモリのどこにでもある｡
そこで､ 構造体の中にその項目名の要素のためのメモリを確保したいのです｡
アイテムポインタは､ アイテムの読み込みと印刷の両方の関数に渡される必要があります｡
この課題では､ ポインタを理解すること､ 構造体の中のメンバーとして使うこと､
そしてポインタの受け渡しをすること､ さらにmallocをする練習をすることができます｡
それから､ mallocをするときは必ずfreeをしなければならないので､
それをプログラムに追加しておくことを忘れないでください｡
だから､ 頑張ってください｡
次回の講義で解決策を提示します｡
サイズのmallocに関しては､ 30文字とか､ 任意のサイズを選べばいいんです｡
読み込む必要はありません｡
何か質問があれば教えてください｡ ありがとうございます｡