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

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

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

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

GTK+

GTK+とはGUIを作るために作られた、とても使いやすく機能に富んだツールキットです。クロスプラットフォームによる互換性と、使いやすいAPIを備えています。

Q&A

解決済

3回答

2395閲覧

ポインタおよびg_malloc関数

antiquities_mas

総合スコア17

C

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

GTK+

GTK+とはGUIを作るために作られた、とても使いやすく機能に富んだツールキットです。クロスプラットフォームによる互換性と、使いやすいAPIを備えています。

0グッド

0クリップ

投稿2018/05/05 15:29

テキストエディタを作ろう
テキストエディタを作りながらC言語を勉強しよーうと思っている者です。

そのサイト中のコードの42行目に

C

1y_editor = (Y_Editor *)g_malloc(sizeof(Y_Editor));

というのが出てきて、本文の解説には

g_malloc関数で実際の領域を確保して その番地を先程確保したポインタ変数に代入しています。

と記述されていたのですが、
そのコードの文法構造がよく分からないので、説明していただけませんか。
よろしくお願いします。

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

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

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

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

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

guest

回答3

0

  • (Y_Editor *)構造体Y_Editorのポインタ型
  • g_mallocメモリを確保する関数 → g_malloc
  • sizeof(Y_Editor)構造体Y_Editorのサイズ

構造体Y_Editorのサイズメモリを確保し、構造体Y_Editorのポインタ型にキャストしてy_editorに代入

投稿2018/05/05 15:38

編集2018/05/05 15:41
gingertail

総合スコア317

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

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

0

ベストアンサー

調べてみたら通常のmallocにエラー処理などを付与したようなものみたいですね。

mallocは、メモリ領域の確保を動的に行います。

例えば、「int x[10];」という感じで変数を用意した場合、プログラムをコンパイルする時点で要素数10を決めておかなければなりません。別の整数変数nを用意して「int x[n];」ということは(普通は)できません(特殊な環境下であれば別です)。一方で、プログラムを動作させるまで要素数が確定しない配列を使いたいことも多々あります。こういう場合は動的確保を行います。もちろん、これは配列以外の場合も同様です。

投稿2018/05/05 15:45

HogeAnimalLover

総合スコア4830

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

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

0

多分に推測ですが、まず g_malloc 関数は

C

1void* g_malloc(int size);

のような宣言だと推測されます。
この関数は size で指定されたサイズの領域を確保し、その先頭アドレスを表す void 型へのポインタ(void*)として返します。

そしてこの void* のポインタを、構造体 Y_Editor 型へのポインタにキャストすることで、あとでそのポインタを利用して pointer->{Y_Editor型のメンバ} の形でアクセスできるようにしているのです。
実際、create_window 関数の中で、渡されてきた Y_Editor* の引数を利用して、アクセスしていますね。

※C言語において void* は、他のいかなる形のポインタとも互換性があることが保証されているので、どんなポインタにもキャストすることができます

投稿2018/05/05 15:42

tacsheaven

総合スコア13703

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問