[過去ログ] スレを勃てるまでもないC/C++の質問はここで 24 [転載禁止]©2ch.net (1002レス)
前次1-
抽出解除 レス栞

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
435
(3): 422 [sage] 2016/04/07(木) 23:15:19.36 ID:Xs8CGXEi(1) AAS
>>424
レスありがとうございます。ただ、まだ理解できていません;;
本体のソースは以下の通りです。
http://lifeloveregret.googlecode.com/svn/trunk/c/answer/LinuxProgramming-samples/daytime.c

解説図によるとリストを作成し
**resのダブルポインタによって
*res→構造体1→構造体2……

となるようですが、
*resのシングルポインタで
res→構造体1→構造体2……

とはできないのでしょうか?

どなたでもよろしいのでおしえてくださらないでしょうか?
436
(1): デフォルトの名無しさん [sage] 2016/04/08(金) 00:21:41.46 ID:92gpEbvG(1/2) AAS
>>435
深く考えるな

「作成した文字配列」を返す関数を作ってみろ
ただし return によってそのアドレスを返してはダメだ
これができればおのずと理解できる

ヒントは

「おばあちゃんの家に箱を持っていくとりんごを入れてくれます」 ・・・シングルポインタ
「おばあちゃんの家に行くと箱に入ったりんごをくれます」 ・・・ダブルポインタ

変数というのは何かを入れる箱だと教わった記憶はあるかな?
普通に引数に変数を指定しても「箱」が変わってしまうために、関数で中身を変えても元の箱の中身が変わることは無い
じゃあ箱を用意してその箱を引数に渡そうってのがシングルポインタ

では箱も相手が用意する場合、その箱ごと貰うためにはどうしたらいいか?
箱を入れる箱を用意して、そこに箱ごと入れてもらおうってのがダブルポインタ

typedef を知っているなら「りんごを入れる箱」を定義して、それを入れる箱という意味でシングルポインタとして扱っても良い
438: デフォルトの名無しさん [sage] 2016/04/08(金) 01:05:23.41 ID:92gpEbvG(2/2) AAS
>>435
ダブルポインタは「配列を受け取る箱のアドレスを示している」ってのを理解できれば
441
(1): デフォルトの名無しさん [sage] 2016/04/08(金) 02:36:19.83 ID:LFrj8SRS(2/2) AAS
>>435
> *resのシングルポインタで
> res→構造体1→構造体2……
>
> とはできないのでしょうか?
機能的にはそれでもいいんだけどな

でもそれだとリストの最初の要素を使うときには
res.ai_addr
二つめ以降の要素を使うときには
p->ai_addr
と.と->を使い分けるほうが面倒くさくても自然なやり方になってしまう
だったらresもポインタにして
res->ai_addr, p->ai_addr
として自然に一貫したやり方で扱える方がいいだろ

他にもポインタでなく値で返すと
後で解放用の関数に渡してメンバの解放をする必要があることを忘れてしまう
とかの理由もあってそういう設計になっている
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.036s