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

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

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

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

アルゴリズム

アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

リストボックス

ユーザーがリストから1つ以上のアイテムを選択できるようにするGUI要素です。

Q&A

解決済

3回答

321閲覧

線形リストにおける構造体のポインタについて教えていただきたいです。

apeirogon0813

総合スコア117

C

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

アルゴリズム

アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

リストボックス

ユーザーがリストから1つ以上のアイテムを選択できるようにするGUI要素です。

0グッド

1クリップ

投稿2019/03/16 16:24

編集2019/03/16 16:25

線形リストを構成するにはmallocでメモリを確保していく方法ですが以下の2つのコードの意味の違いはあるのでしょうか?

C

1struct list { 2 int data; 3 struct list *next; 4}; 5 6struct list node; 7struct list *p = &node;

C

1struct list { 2 int data; 3 struct list *next; 4}; 5 6struct list *p; 7p = malloc(sizeof(struct list));

考えれる違いとしては
前者の方は変数nodeとアドレスが結び付けられていますが後者はmallocなので確保したデータのアドレスと結びつく変数はない。
差異はあるのでしょうか?

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

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

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

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

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

jimbe

2019/03/17 01:34

線形「リスト」と「リスト」ボックスは関係ありません.
apeirogon0813

2019/03/20 07:04

すみませんそうなんですね
guest

回答3

0

ベストアンサー

こんにちは。

以下の2つのコードの意味の違いはあるのでしょうか?

線形リストとしてみると大違いです。

一般に線形リストの各ノードはプログラムを実行している時に獲得したり開放したりします。プログラムへの何らかの入力に応じてノードを増やしたり減らしたりできるようにするためです。

しかし、前者でpの指す先はプログラムをコンパイルする時に決定されるようなものですので、プログラムへの入力に応じてノードを増やす/減らす等の操作には事実上使えません。(再帰呼出しで使うケースがあるかも知れませんが、そのような使い方はほとんど意味がないだろうと思います。)
つまり、前者の方法で例えば先頭や最後尾のノードを取得することは有りえますが、それ以外のノードまで前者の手段で取得するプログラムはほとんどのケースで役に立たないので、通常は後者の方法を使います。

投稿2019/03/16 17:43

Chironian

総合スコア23272

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

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

apeirogon0813

2019/03/20 07:08

動的確保するならやはり後者の方が正しい使い方なんですね。ありがとうございます。
guest

0

上の例の場合、下の2行をどこに書いたのかによって、どこからメモリが確保されるか変わります。

  • グローバルスコープ:静的領域
  • ローカルスコープ:スタック領域

下の場合は常にヒープ領域から確保されます。

下の例で、mallocの呼び出しがあるということは関数の中でやっているつもりだと思うのですが、同じ位置で上の例に書き換えた場合、すぐ返ってしまう関数だとスタック領域から変数が消えてゴミのアドレスを指すようになったりするので注意が必要です。mainとかでやる分には良いかもしれませんが・・・

投稿2019/03/16 16:52

編集2019/03/16 17:19
hayataka2049

総合スコア30933

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

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

0

無いっちゃないし、あるっちゃある。その場に用意しておくか、mallocで確保するかの違い。

投稿2019/03/16 16:46

episteme

総合スコア16614

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問