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

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

ただいまの
回答率

87.80%

Cを学校で勉強するようなのですが、つまずきやすいポイントを教えて下さい!

解決済

回答 8

投稿

  • 評価
  • クリップ 3
  • VIEW 3,787

score 29

こんにちは
受験が終わり、今年からC言語を学校で勉強するらしいのですが入学する前に基礎をおさえておきたいです。

現在はjavascriptをやっていて独習javascriptという入門書を買い、演算子、制御文ときて現在関数を勉強してます
そこで一通りやったらcの勉強をしようと考えているのですが、わかりやすい入門書などあれば教えて頂きたいです。

またCを学ぶ上でつまずきやすい点なども教えて頂けると幸いです
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 8

+2

オブジェクト指向ですかね。
私の場合はロジック構築やポインタではあまり躓きませんでしたが、オブジェクト指向の設計思想に関してはちょっと理解に時間がかかりました。
まぁ、Cに限った話ではありませんが・・・。
部品単位でクラスを作って、インスタンスを組み合わせてプログラムを構築していくやり方ですが、ある程度慣れが必要になると思いますので、これから書かれるプログラムではそういった部分も意識していくと良いかと思います。

Javascriptでは現在関数まで勉強しておられるとの事ですが、Cへ進むのであれば、「use strict」を使い、ついでにクラスまで勉強したうえで、構造的によく考えてプログラムを書く事をお勧めします。

ちなみにですが、ポインタはアセンブラをちょっとかじると良くわかる様になりますよ。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

checkベストアンサー

+1

まず、私がつまずいた順に……
・変数の型
・関数化
・ループとリエントラント
・ポインタ
GUIになると、win32api系列。
特に、ListViewやTreeView系が未だにわかりません。
更には、「デバイスコンテキスト」の概念や、String型のようなガベージコレクション(GC)。
GCは、メモリを自動開放をしてくれるなどの機能を持っていますが、ポインタのように自分で好きなタイミングでメモリの確保と開放を行えないため、コアな処理の時に不安になり、面倒でもポインタで組んだりします。

GUIを組む場合、JavaScriptはブラウザ動作となりますが、Cではウインドウを自分で定義しなければいけません。
厳密に言うと、JavaScriptは「スクリプト言語」で、C言語「プログラミング言語」となります。
コアとなる部分を自分で書くことができる(書かなければならない)という点で相違がありますね。

おすすめの参考書は、私は「ない」と言っておきます。
質問者様の「わかりやすい」と思う説明と、私の「わかりやすい」と思う説明はおそらく違うからです。
本のチョイスは、書店に行き、ページをパラパラと捲り、解説の配置や内容の濃さが自分好みのものを選ばれると良いかと思います。

蛇足ですが、私は「ActiveBasic」というBASIC言語(化石言語とか言うな!!)でプログラムを組んでいますが、Cベースなのでこちらで学んでもいいかと思います。
Cより少しやさしい部分が……あるような、ないような……?

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/01/21 02:02

    コメント感謝します
    以前からポインタが難しいとはきいていたので少し調べたら分かりやすい動画がアップされてました。どのようなものか感覚は掴めた?気がします

    本については見に行って分かりやすい本が見つかったので良かったです
    nnahitoさんの仰る通り変数の型は最初とっつき難かったですが、大体分かるようになりました。
    javascriptと並行してやっていこうと思います。ありがとうございました

    キャンセル

+1

ポインタですかね!

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+1

私はJavaScriptを学習しているものですが他言語と違い、JavaScriptは良くも悪くも大雑把と言いますかなかなか変わった言語なんです。
他言語は型に厳格であること(JavaScriptは暗黙の型変換などが可能ですが)や変数の宣言を含めた書式や構成の違いに気を付けて学ぶべきだと思います。
またC言語では文字コードの型の違いなども意識しないと困ることがあるのではないかと思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+1

C言語といっても、処理系は、いろいろ有るので、
取りあえず、俯瞰できるサイト
 Wiki:C言語、主な C 言語処理系、C 言語の規格
 http://ja.wikipedia.org/wiki/C%E8%A8%80%E8%AA%9E
 GNUコンパイラコレクション:Linux / Windows / 組込み系 や、開発環境によったり。
 Microsoft Visual C++ :VS2008 迄と、VS2010以後で、比較的大きな違いがあります。
 組込系では、AVR Studio 5 以後が、Visual Studio 化していたはずです。
がターゲットであれば、それなりに、ネット上でも資料があります。
 毛色の変わったところでは、
 Fail-Safe C : https://staff.aist.go.jp/y.oiwa/FailSafeC/
先ずは、対象OS、処理系を確認してください。
ソフトウェアは、学校でのライセンスがあったり、学生の間は特別割引があったり。
無償版があったり。

キャストや、ポインタ、構造体、共用体については、アセンブリ出力を見ると、
理解しやすいのですが、今は、アセンブラを教えないからどうかなぁ。

学習の内容により、Cの基本的な部分の学習なのか、OS依存機能他、どこまで含むのかで、
読むべき書籍も変わるはずです。

cは、容易に、意図せず、不具合、バグを作り込む事ができる点が、
インタープリター、スクリプト系からの、違いです。
デバッガを使いこなす事が出来るかどうかで、作成効率が変わります。

昔々の遊びとしては、Cのソースコードを、アセンブラのソースコードに、
何処まで近づけるか、というのをやっていましたっけ。
オプティマイザが貧弱だったり、CPU/MEMORYが貧弱だった時代、
コンパイラの癖を、掴む為の遊びでした。

質問は、C++が多い様子ですが、
以下の質問サイトでは、C/C++のゲーム系で、発生しやすい問題が、質問されています。
 C言語何でも質問掲示板
 http://dixq.net/forum/viewforum.php?f=3&sid=d4dcca8cb91114d089bc080eec09e8d7

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+1

C言語と言っても、規格の種類と処理系の種類があります。プログラミング言語で規格の種類と処理系の種類が複数あるのはそれほど珍しいことではありません。

C 言語の規格 - Wikipedia
主な C 言語処理系 - Wikipedia


実際に授業で扱うのがどの処理系なのかが分かりませんので一概には言えませんが、個人的につまずきやすいと思われるのは、やはりポインターだと思います。
ポインターの中でも配列のポインターが特に混乱しやすいと思っています。


よくある質問・間違いに関するサイトも多数あります。ある程度学んでから読んでみると良いでしょう。

C言語 FAQ 日本語訳
ありがちなC言語プログラムの間違い

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

JavaScriptを勉強中ということで、おそらく制御構文(if、switchなどの分岐や、for、whileなどのループなど)は問題無いと思います。

JavaScriptには無い(訳ではないが基本的には考慮しなくてもよい)考え方として、メモリ、ポインタなどがつまづきやすいポイントかと思いますので、その辺を重点的に勉強してみてください。
また、構造体や共用体も引っかかるポイントかもしれません。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

先ず、C言語で躓きやすい場所というと、やはりポインタ周りであろうと思われます。
「どういう機能かは分ったが、それが何の役に立つのかわからない」そう挫けそうになるかもしれません(私がそうでした)。そういう時に個人的にお勧めする方法は「しばらく放っておく」事です。対象がどういう物か、文字情報として把握できたら、その先の内容に進んでしまいましょう。ある日突然、「ああ、アレはこういう時の為に在るのか!」と理解出来るものです。幸い、独学ではなく、学校で習うという事なので、どうしても分からない場合(或いはテストが近づいている場合とか)は素直に先生に質問するとよいでしょう。

質問者はJavaScriptの経験が有るという事なので、ポインタの他には「型」や「main関数の存在意義」、「プリプロセサ(特に#include)」で躓くかもしれませんね。また、C言語は、オブジェクト指向プログラミングが一般的になるより前に生まれた言語であるため、「何故こんなに書きづらい記法なのだろう」という感想を抱かれるかも知れません。

入門書ですが、個人的には、林晴比古氏氏の書かれた物は分り易く、逆に柴田望洋氏の本は分かり難く感じました。もっとも、ここは結構「相性」が影響すると聞きます。是非、実際に本屋(大きな所の方が良いです。ヨドバシカメラ等の大きめの家電量販店のPC書籍コーナーも割とお薦めです)で、または図書館で実物を手に取り、比較してみる事をお勧めします。

C言語はコンピュータについての理解を深めるには良い言語だと思います(アセンブラほど読みにくくなく、ポインタでコンピュータがどうデータを記憶しているかの基本的な理解をする事が出来る)。ぜひ頑張って下さい。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 87.80%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る