###困っていること(1)
使っている参考書は『苦しんで覚えるC言語』です。16章まで勉強を進めていて3週間経過しています。
(C言語が初めて扱う言語のため、本当にプログラム初心者です。)
C言語の書式について疑問が生じました。
ポインタ変数にはアドレスを入力出来るモードと
数値をメモリに記憶出来るモードがあることは理解できたのですが
構造体の勉強中に混乱し始めてしまって…。
困っていること(2)が本題です。
しかし簡単なところから確認していきたいので、お付き合い願います。
まず、以下の15行目の書き方には問題がありますか?
ポインタ変数なので、まずは[*data]として通常の変数を記憶できるようにしました。
scanf関数を用いているので[&*data]としています。
###ソースコード
C
1#include <stdio.h> 2 3void test(int *data); /*プロトタイプ宣言*/ 4 5int main(void) 6{ 7 int hoge; 8 test(&hoge); /*hogeのアドレスをtest関数に与える*/ 9 printf("hoge = %d\n",hoge); 10 return 0; 11} 12 13void test(int *data) /*hogeのアドレスを受け取る*/ 14{ 15 scanf("%d",&*data); /* 15行目 */ 16 return 0; 17}
###困っていること(2)
今度は構造体で、構造体ポインタ変数を用いるときに疑問が生じてしまいました。
(*構造体ポインタ変数名).要素名
↓
構造体ポインタ変数名->要素名
と書き改めることまでは把握できました。
以下の32行目の書き方で混乱してしまいました。
&data->release
↓
&(*data).release
↓ (?)
data.release
では「struct or union」と表示されるのですが何が問題なのでしょうか…。
上記の一段目と二段目は同じですが、三段目とこれらの違いがはっきりしていなくて悩んでいます。
###ソースコード
C
1#include <stdio.h> 2 3/*新規に game型 を宣言*/ 4typedef struct { 5 char name[256]; /*作品名*/ 6 int release; /*発売年*/ 7 char genre[256]; /*ジャンル*/ 8} game; 9 10void Input_game(game *data); 11void Output_game(game data); 12 13int main(void) 14{ 15 int i; 16 game data[5]; 17 18 for (i = 0;i < 5;i ++) { 19 Input_game(&data[i]); 20 } 21 22 for (i = 0;i < 5;i ++) { 23 Output_game(data[i]); 24 } 25 26 return 0; 27} 28 29void Input_game(game *data) 30{ 31 scanf("%s",data->name); /* nameが配列名なので、&は必要ない 。*/ 32 scanf("%d",&data->release); /* releaseが変数名なので&をつける…?*/ /*32行目*/ 33 scanf("%s",data->genre); /* nameと同様 */ 34 return 0; 35} 36 37void Output_game(game data) 38{ 39 printf("作品名:%s 発売年:%d ジャンル:%s\n",data.name,data.release,data.genre); 40 return 0; 41}
###追加の質問
「苦しんで覚えるC言語」の次に読んでみると、参考になるかもしれない書籍がありましたら
教えていただきたいです。
(こちらは本当におまけですので、無理に答えていただなくても大丈夫です。)
よろしくお願いします…!
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/03/31 04:40