構造体いおいて、どのようにポインタを利用したらよいか分からず、いくつか質問させていただきたいと思います。一点目、構造体のリストへのポインタとキャラクタid1,id2を引数にして、キャラクタidの順番を入れ替える関数のコード書きました。id1.next=&id2; id2.next=id1;で表せると思ったのですが、エラーが起きてしまいます。どこが間違っているのでしょうか。
c
1#include<stdio.h> 2#include<string.h> 3#include<stdlib.h> 4#define STR_MAX 256 5#define WEPON 1 6#define AROMOR 2 7#define SHIELD 3 8 9struct equip {//装備 10 //メンバ変数 11 int type; //タイプ 12 char name[STR_MAX]; //名前 13 int point; //修正値 14}; 15 16typedef struct player { 17 int id; //キャラクタのID 18 char name[STR_MAX]; //名前 19 int level; //レベル 20 int power; //ちから 21 int protec; //まもり 22 struct equip wepon; //武器 23 struct equip armor;//鎧 24 struct equip shield;//盾 25 struct player *prev;//前のキャラクタへのポインタ 26 struct player *next;//次のキャラクタへのポインタ 27 28}player_t; 29 30void paty_change(player_t *play, int id1,int id2); 31 32void paty_change(player_t *play, int id1,int id2) { 33 id1->next = id2; 34 id2->next = id1; 35}
二点目、キャラクタへのポインタ*charaを構造体リストの最後に追加する関数(とその動作を確認するコード)を書きたいです。これであっているでしょうか。
c
1void paty_ch(player_t *play, char *chara); 2 3void paty_ch(player_t *play, char *chara) { 4 player_t *play=&chara; 5 play->next = &play; 6} 7
三点目、キャラクタのidと構造体リストへのポインタを受け取り、そのidをもつキャラクタへのポインタを返す関数(とその動作を確認するコード)を)書きたいです。ポインタを返すというのはどういう操作をすることなのでしょうか。また、どう書いたらよいか教えていただきたいです。
c
1char paty_id(player_t *play, int *id); 2 3char paty_id(player_t *play, int *id) { 4 play->id = &id; 5 return play->name; 6}
四点目、キャラクタへのポインタとstruct equipで表されるアイテムを受け取り、キャラクタにアイテムを装備させる関数(とその動作を確認するコードを))書きたいです。struct equipとplayer_tがどのような関係にあるか理解しておらず、どのようにして装備させたらよいか分かりません。
c
1void attach(player_t *play, struct equip wepon); 2 3void attach(player_t *play, struct equip wepon) { 4 5}
五点目、player_tへのポインタを受け取り、先頭から順にメンバリストの名前のみを表示させる関数を書きたいです。この時、受け取ったポインタが先頭かどうか確認させたいです。このようなコードをかいたのですが、無限ループのような状態になってしまいます。どこが間違っているのでしょうか。
c
1void paty(player_t *play){ 2 player_t *start; 3 int i = 0; 4 for (i = 0; play!=NULL; i++) { 5 if (i = 0) { 6 play = malloc(sizeof(player_t)); 7 start = play; 8 printf("名前を表示できませんでした。\n"); 9 } 10 else { 11 play->next = malloc(sizeof(player_t)); 12 play = play->next; 13 prinf("名前は%s\n", play->name); 14 } 15 }
まったく投げやりな質問になってしまって申し訳ございません。構造体のリストとポインタの関係だけでも教えていただけると嬉しいです。よろしくお願い致します。
回答5件
あなたの回答
tips
プレビュー