質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

ポインタ

ポインタはアドレスを用いてメモリに格納された値を"参照する"変数です。

Q&A

解決済

2回答

1478閲覧

リスト構造を用いリストに格納された順にデータを表示したい

退会済みユーザー

退会済みユーザー

総合スコア0

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

ポインタ

ポインタはアドレスを用いてメモリに格納された値を"参照する"変数です。

0グッド

0クリップ

投稿2020/06/02 09:41

編集2020/06/02 11:43

構造体を用いて、メイン関数内のポインタで、値を参照渡しをして、整数型の値1,2,3,が求められるようにしたいです。

#include <stdlib.h> struct cell { int item; struct cell* next; }; struct cell* next(struct cell* ptr) { return ptr->next; } void printList(struct cell* ptr) { while (ptr != NULL) { printf("%d ", ptr->item); ptr = next(ptr); } printf("\n"); } int main() { struct cell* pc1, * pc2, * pc3; pc1 = malloc(sizeof(struct cell)); pc2 = malloc(sizeof(struct cell)); pc3 = malloc(sizeof(struct cell)); pc1->item = 1; pc1->next = pc2; pc2->item = 2; pc2->next = pc3; pc3->item = 3; pc3->next = NULL; printList(pc1) }

このコードの通りエラーが pc1=mallocの方に出ておりまして、構造体変数であるcellとpc1の型が一致していないエラーが出ています。構造体変数としてpc1,pc2,pc3を導入したにも関わらずなぜvoid型としてあらわされるのでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

このコードの通りエラーが pc1=mallocの方に出ておりまして、構造体変数であるcellとpc1の型が一致していないエラーが出ています。

それは、おそらくソースファイルの拡張子を .cpp にして
C++コンパイラでコンパイルしているからでしょう。

C では、void * の値はどんなポインタ変数にも代入可能です。
C++ では、void * の値は代入先の型に明示的な型変換を行わなければなりません。

構造体変数としてpc1,pc2,pc3を導入したにも関わらずなぜvoid型としてあらわされるのでしょうか?

pc1 などは、構造体変数ではありません。「構造体へのポインタ」の変数です。
pc1 などは、void型ではありません。「struct cell *」型です。

投稿2020/06/02 12:33

kazuma-s

総合スコア8224

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/06/02 12:40

ありがとうございます。学校の環境だとコンパイルが通っていたので、なぜかと思い質問させていただきました。
guest

0

ベストアンサー

mallocという関数の戻り値が、void* だからです

目的とするポインタの型にキャストすればいいです

投稿2020/06/02 09:46

y_waiwai

総合スコア88042

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/06/02 12:23

本当に何度もありがとうございます。こんな些細なことで質問する自分が恥ずかしく思います。これからも精進していきます。
Bull

2020/06/02 12:25

C言語ではこの部分はエラーにならないのでは? void * は任意のポインター変数に代入可能です。 C++ としてコンパイルしているのではないでしょうか。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問