プログラミングの勉強を再開しようということでいろいろと試してみたが
まずはC言語をある程度思い出した上でC言語を深めようという事にした。
その次はまあいろいろと。
実際問題まずは英語のお勉強しないといけないんだが。
5月25日にTOEICの受験を申し込んでしまったので。
何事もまずは申込だ。そういって基本情報も受かったんだし。
それはそうと。
C言語をやっていて疑問点が浮上してきてここ2、3日悩んでいた。
分かる人にとってはゴミみたいなものなんだろうけど。
構造体とポインタとアドレス確保関数についてだ。
例えば、ある構造体を宣言する。
typedef struct {
int no;
char data[10];
} NODE;
/*typedefを使って省略してみた*/
それからそれから、
構造体ポインタを生成してアドレスを確保する。
NODE *p = (*NODE)malloc(sizeof(NODE));
こんな感じでしょうか。
で疑問に思った点は、mallocで確保したメモリはどういった状態なのか。
(malloc自体は引数で指定した型のサイズ(基本的には)分を確保して
その先頭アドレスを(void*)で戻り値として返すという関数。)
確保するだけなのだから中身はどうなっているのか。
変数として生成していないんだから
アドレスだけならこれに代入なんてした日にゃ、もう、タマらんです。
ヌルポだかセグフォになるに決まってる。
じゃあいつ構造体のメンバに値を代入できるのか?
結論から。
答えは(*void)をキャストした時点で構造体メンバ変数に代入可能に。
改めて考えてみればそうだなと、納得。
今まではただこれはこうだ、こう使うんだ。とただの暗記だったような気がする。
って考えていたが改めてこの引数はアドレスなのか、
この戻り値はポインタなのか、なぜprinfは様々な型を引数に取れるのか。
こんな事を考えていると何も知らないことを実感させられる。
細かいことにこだわりすぎても進まないけど。。。
まずはC言語をある程度思い出した上でC言語を深めようという事にした。
その次はまあいろいろと。
実際問題まずは英語のお勉強しないといけないんだが。
5月25日にTOEICの受験を申し込んでしまったので。
何事もまずは申込だ。そういって基本情報も受かったんだし。
それはそうと。
C言語をやっていて疑問点が浮上してきてここ2、3日悩んでいた。
分かる人にとってはゴミみたいなものなんだろうけど。
構造体とポインタとアドレス確保関数についてだ。
例えば、ある構造体を宣言する。
typedef struct {
int no;
char data[10];
} NODE;
/*typedefを使って省略してみた*/
それからそれから、
構造体ポインタを生成してアドレスを確保する。
NODE *p = (*NODE)malloc(sizeof(NODE));
こんな感じでしょうか。
で疑問に思った点は、mallocで確保したメモリはどういった状態なのか。
(malloc自体は引数で指定した型のサイズ(基本的には)分を確保して
その先頭アドレスを(void*)で戻り値として返すという関数。)
確保するだけなのだから中身はどうなっているのか。
変数として生成していないんだから
アドレスだけならこれに代入なんてした日にゃ、もう、タマらんです。
ヌルポだかセグフォになるに決まってる。
じゃあいつ構造体のメンバに値を代入できるのか?
結論から。
答えは(*void)をキャストした時点で構造体メンバ変数に代入可能に。
改めて考えてみればそうだなと、納得。
今まではただこれはこうだ、こう使うんだ。とただの暗記だったような気がする。
って考えていたが改めてこの引数はアドレスなのか、
この戻り値はポインタなのか、なぜprinfは様々な型を引数に取れるのか。
こんな事を考えていると何も知らないことを実感させられる。
細かいことにこだわりすぎても進まないけど。。。