電子書籍の厳選無料作品が豊富!

c言語のポインタについて初心者です
構造体をポインタをポインタ配列に保存して、配列の番号を使ったりしてソートしたいと思っていました。しかし、以下のようにしてポインタ変数nを宣言して代入しようとしてもうまく行きません。どうしたら良いのでしょうか。


struct MyStruct

{

struct Mystruct *pre;



int num;

char name[20];

int data;



struct Mystruct *next;



}*classA[N];



void printfrom(MyStruct *);



int main()

{

int i;

struct Mystruct *n;



printf("Num->");

scanf_s("%d", &classA[0]->num);

printf("\n");



printf("Name->");

scanf_s("%c", classA[0]->name);

printf("\n");



printf("data->");

scanf_s("%d", classA[0]->data);

printf("\n");



classA[0]->next = NULL;

classA[0]->pre = NULL;

n = classA[0]; ←ここでエラーになります!肩が合わないそうです!

質問者からの補足コメント

  • ということはclassA[0]= (struct Mystruct *)malloc(sizeof(struct Mystruct))とかやればいいわけですか!?

      補足日時:2019/01/13 22:44
  • あと visual studio2017 のC++のからのプロジェクトで作ってます。

      補足日時:2019/01/13 22:45
  • 図々しくてすいません
    えらーがでる理由はよくわかなライということでしょうか。

      補足日時:2019/01/14 11:51
  • あ!そんな単純な理由だったのですね。すいませんでした。

      補足日時:2019/01/15 16:13

A 回答 (5件)

余計なことかもしれんけど, 「C の勉強」をするなら C++ ではなく C を使うべきだね. ここに挙がっているやつでも, C と

C++ では挙動が (ちょっとだけど) 確実に違うし.
    • good
    • 0

classA[0] は(MyStruct*)型、nは(Mystruct*)型。


エラーメッセージの通り。
    • good
    • 0

せめてエラーメッセージは正確に書いてほしいものだと思いつつ.



struct Mystruct とstruct MyStruct が違う型であることは理解できていますか?
    • good
    • 0

>ということはclassA[0]= (struct Mystruct *)malloc(sizeof(struct Mystruct))とかやればいいわけですか!?



実体指していない点についてはそうなります。

>visual studio2017 のC++のからのプロジェクトで

ということで試しました。
E0513  型 "MyStruct **" の値を型 "Mystruct *" のエンティティに割り当てることはできません
とか言われましたな。
実体の有無はこの際関係ないと思うのですが…

って、MyStructとMystructは別物ですがな。
    • good
    • 1

無意味に改行多いと読みにくいです。




>struct MyStruct
>{
> struct Mystruct *pre;
> int num;
> char name[20];
> int data;
> struct Mystruct *next;
>}*classA[N];

ということで、classA[]は構造体MyStructへのポインタの配列です。
この時点では実体を指していたりはしないはずですが、
>scanf_s("%d", &classA[0]->num);
ではどこの実体指しているんでしょうか?
>scanf_s("%d", classA[0]->data);
ではどこのアドレスがclassA[0]->dataに格納済みなんでしょうか?
# &classA[0]->data ではないので、scanf_s()にデータの格納先として渡したアドレスはclassA[0]->dataに入っていることに。

>n = classA[0]; ←ここでエラーになります!肩が合わないそうです!

一応、型は合っているんじゃないかなぁ?
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!