c言語

  • 1二次元好きの匿名さん25/11/17(月) 14:57:04

    難しすぎる
    大学で必修なんだがマジにキツい
    お前らはどうやって習得しましたか

    再帰ポインタ構造体でボコボコにされてる今
    c言語学習者定番の躓き部分らしいね

  • 2二次元好きの匿名さん25/11/17(月) 15:00:33

    大学の必修くらいの内容なら参考書の
    該当箇所ひたすらコピペして感覚掴んだ

  • 3二次元好きの匿名さん25/11/17(月) 15:02:57

    どこがどうわかんない?
    教えられるぜ

  • 4二次元好きの匿名さん25/11/17(月) 16:04:56

    >>3

    色々ありすぎるのでおすすめの参考書など教えてくださると嬉しいです。

    主に再帰の応用(スタックとかなんとか)とポインタ1からがわかりません。あと配列難しいしfor文3連の表みたいになるやつはどうなってんだあれ

    構造体はポインタとか再帰とか配列がわからんせいでできてない面が大きいです。




    本当に恥ずかしいんだが、ぶっちゃけかなり初歩の応用から危ういんだな

    再帰は基本の基本は一応できるんだが例題とかで出るハノイの塔の仕組みとかよくわからん、スタック領域とかもう???ってなる

    情報積んでおいてそれがどうなるんですか


    ポインタは基本からダメです

    アドレスが何を言ってんの、mallocとかreallocとか似てるし()の中身も複雑に見える

    最後にfree()で解放すればいいと思ってる、それしかできない


    構造体は

    struct 〇〇{

     int 〇;

    char △ ;

     …

    };

    みたいな基本系はわかってるつもりなのですが、

    配列苦手なのに構造体配列なんてもの存在するしポインタすら入ってくる

    たまにくるintとかに引っ付くアスタリスクは何?

  • 5二次元好きの匿名さん25/11/17(月) 16:06:58

    cの*がまさにポインタ(場所を覚えるやつ)じゃなかったか

  • 6二次元好きの匿名さん25/11/17(月) 16:08:25

    参考書読むより学校から出た実習課題まじめにやり込んだほうがわかると思う
    エラー出してなんぼ
    何回もエラーどこで起きてるのかやってる内にわかるようになる

  • 7二次元好きの匿名さん25/11/17(月) 16:11:38

    メモリ管理は自然に配慮するしかないからな
    センスって表現は好きじゃないけど、慣れない人は性格的に慣れないと思う

  • 8125/11/17(月) 16:14:50

    >>6

    やっぱそういうもんですか

    にしても出来なさすぎて毎回最終的にチャットgptとかに頼ってんですけど、そうじゃないと提出期限に間に合わない

    冬休みなんかにやり込んだ方がいい感じですかね

    でもこれからc言語ってどれぐらい使うんだろうか、授業でこんなこと言うのは野暮というか使う使わないの問題ではないけども

    進路は一応情報方面行きたいので


    てか今気づいたけどスレ画c言語じゃなくてc++だ

    何やってんだ

  • 9二次元好きの匿名さん25/11/17(月) 16:15:50

    本屋でC++の本立ち読みしてコード覚えて帰って、あとはひたすらネット漁りながらコード書いてるうちに覚えたな
    結局作りたいものが無いうちは覚えられないし身に付かないだろう

  • 10二次元好きの匿名さん25/11/17(月) 16:18:56

    自分はC言語じゃなくてPythonだったけどまさに書いてエラー吐いて直してを繰り返してどうにかしたよ
    時間があるからできたことだと思うのでそのまま同じようにやれって言うつもりはないけど
    ある程度は数をこなす覚悟が必要だと思う

  • 11二次元好きの匿名さん25/11/17(月) 16:20:22

    >>8

    cppを今後使わなくても考え方は使えるからちゃんとやったほうがいいよ

  • 12二次元好きの匿名さん25/11/17(月) 16:22:14

    ポインタ教えてくれたコマに出された課題をもう一回自分でやるとか
    わかってる友達に教えてもらいな
    内申点も稼ぎたいなら先生に聞くと印象良くなるぞ

  • 13二次元好きの匿名さん25/11/17(月) 16:23:13

    >>4

    本はこれがおすすめ

    Amazon.co.jpamzn.asia

    ポインタなんだけど中身はメモリのアドレスが入ってる

    アドレスってのはメモリの先頭からのバイト数ととりあえず思っておくといい

    変数はアドレスなくてもコンパイラがいい感じに配置してくれるからアドレスを気にする必要がない

    配列も同じでコンパイル時に決定される

    でもこれだと不都合が生じて、例えば配列を動的に確保(長さが実行時に決まるとか)したい時があるわけよ

    そういう時は malloc 使って OS から空いてるメモリのアドレスをもらうんだけどそういう時にポインタが必要

    アスタリスクの意味は場所によって変わる

    これが C 言語の最大の罠の 1 つ

    変数宣言時の int *foo は「foo にアドレスが入ってて中身は int 型ですよ」って意味でそれ以外の *foo は「foo のアドレスに入ってる値を取り出しますよ」って意味

  • 14二次元好きの匿名さん25/11/17(月) 16:23:46

    あとポインタとか構造体配列について教えてもらうときは口頭だけとかテキストだけじゃなくてメモれる環境で聞きな
    口だけで教えるのむず過ぎるし習得するのも難しいから

  • 15二次元好きの匿名さん25/11/17(月) 16:24:09

    コード書くのは本当に書いてるうちになんとなく慣れてきたな
    個人的には分からないところやエラー文を学生なら無料で契約できるgithub copilotに初心者でも分かるように説明してみたいに投げるのも割とオススメ

  • 16二次元好きの匿名さん25/11/17(月) 16:28:18

    >>4

    構造体はいろんな型を一つの型にまとめてひとかたまりのメモリにおけるようにしたもの

    例えば三次元ベクトルを表すとして

    double x, y, z;

    って別々に宣言すると関数の引数に渡すときに面倒だったりするのでまとめたほうが意味的にわかりやすい

    また、ベクトルを配列で確保するときメモリが固まってないと一並びに確保できないので構造体にする


    再帰は……とりあえずフィボナッチ数列でも作って感覚掴め

  • 17二次元好きの匿名さん25/11/17(月) 16:33:00

    プログラミング界隈って一生勉強し続けなきゃいけないせいか初心者に優しい人多いよね

  • 18二次元好きの匿名さん25/11/17(月) 16:36:20

    正直 C を直接書くことは組み込みかシステムプログラミング行かない限りないんだけどコンピューターの大半は C で動いてるので考え方を覚えといて損はない

  • 19二次元好きの匿名さん25/11/17(月) 16:36:59

    ポインタとかはデータが一人ずつ住んでる集合マンションで想像してみ
    中に入ってるものと部屋の住所は別なんだ

  • 20二次元好きの匿名さん25/11/17(月) 16:43:34

    「なんでこういう書き方をするのか」という疑問に答えるのに必要な知識が

    アルゴリズム(ハノイの塔とか)

    C言語の文法(ポインタとか構造体とかループとか)

    メモリ管理の仕組み(ヒープ・スタック)、OS、コンパイラの仕組みとか

    計算機アーキテクチャ

    という別々の階層のものがギュッとされてるから教えるのも学ぶのも難しいんだよね
    でもガッツリ情報系に行くなら詰め込み教育でもCから入った方が良いと思う
    それ以外は普通にPythonとかにしてあげて欲しい

  • 21二次元好きの匿名さん25/11/17(月) 16:44:52

    どうせ大した大学じゃないんだろ
    プログラミングとか諦めれば??

  • 22二次元好きの匿名さん25/11/17(月) 16:47:36

    >>21

    プログラミングの巧拙に学歴関係ないんで……

  • 23二次元好きの匿名さん25/11/17(月) 16:52:28

    このレスは削除されています

  • 24二次元好きの匿名さん25/11/17(月) 16:55:24

    >>21

    いい大学入らないとプログラミングが習得できないと思ってるのか

    キミ中卒か何か?

  • 25二次元好きの匿名さん25/11/17(月) 16:57:10

    明らかにプログラミングエアプな人は放っといていいよ

  • 26二次元好きの匿名さん25/11/17(月) 17:09:19

    アドレスはまんま住所よね
    変数が表札、実体が家みたいなもの
    まあ慣れててもコレなんだっけになるからね

  • 27二次元好きの匿名さん25/11/17(月) 17:09:59

    ポインタのイメージは>>19の通り、関数ポインタとかもあるんで深追いすると大変なところなんだけどまあまずはイメージつけばいいんじゃないか


    スタックは何遍も言われてるだろうけど「あとに入れたもんから出せるよ」って作り

    まさしくハノイの塔がそのルールで動いてる

    直感的にはキューの方が取り扱いやすいんだけど、再帰とかで必要になる概念


    mallocとかreallocは「入れるべき物の大きさが分からない」時に使うイメージでいればいいよ

    mallocしたものを使った後すぐにfreeして、改めてmallocし直すでもいいんだけど、それだと処理が重いんで、「あとちょっと足んねぇんだよなあ」な時にrealloc使う

  • 28125/11/17(月) 19:28:35

    >>15

    これ登録しようとしたのに学生証の写真添付できなくて終わった

    また試します


    大学の教授にこの本勧められたんですが読んだことある方いますか?初心者でもいけますかね、口コミは良さげ

    %OGP%F97HK5TYNB


    やっぱ量こなすのが一番かー

  • 29125/11/17(月) 19:31:08

    >>28

    https://www.amazon.co.jp/%E8%8B%A6%E3%81%97%E3%82%93%E3%81%A7%E8%A6%9A%E3%81%88%E3%82%8BC%E8%A8%80%E8%AA%9E-MMGames/dp/4798030147


    リンク貼れてない

    これネットで見れるっぽいから買う必要ないかも

  • 30二次元好きの匿名さん25/11/17(月) 19:44:56

    OSが無く、APIもライブラリも無く、メモリ管理を全部自分で書く
    そんな状況でもない限り使われない言語やるより
    もっと就職に役立つ言語を必修にしてもらいたいね

  • 31二次元好きの匿名さん25/11/17(月) 19:49:26

    OpenGLでテト○スとか作って遊びながら覚えたな
    『C言語 ポインタ完全制覇』みたいな本を読んだ気がする

  • 32二次元好きの匿名さん25/11/17(月) 20:00:42

    自分の学校はまだwhile文とかしかやってないぜ!
    いずれ難しくなっていくんだな...

  • 33二次元好きの匿名さん25/11/17(月) 20:00:59

    アドレスとかポインタ周りはExcelで例えるとわかりやすいぞ

    メモリ→セル(Excelの場合2次元)
    アドレス→セル番地(A1とかA2とか)
    変数→セル番地の別名
    変数の中身→セルのテキスト
    ポインタ→セル番地のテキストだけを保存できるセル

  • 34二次元好きの匿名さん25/11/17(月) 20:12:07

    私もc言語はポインタの使い方は何一つ覚えてないけど、情報系に進みたいなら勉強するモチベを上げる話をするわ。

    俺は普段c#を使ってるけど、c#の詰まる部分(値型と参照型)を理解するときにポインターの話が頭の片隅に残ってたから、わりと理解が早くなったのはある。

    だから、これから先使わない言語だとしても、ポインターや構造体は別言語でも使える考え方なので、勉強できる時間があるうちに浅くてもいいから納得するといいと思うよ。

  • 35二次元好きの匿名さん25/11/17(月) 20:47:30

    同じだわ
    atcoderやってる友達に勧められて始めたけどJavaScriptしかやったことないからキツい
    てか競技プログラミングって就職の役に立つの?

  • 36125/11/18(火) 01:34:26

    >>33

    メモリ〜変数の中身の部分はかなりわかりやすくて理解できたんですが

    ポインタの「セル番地のテキストだけを保存できるセル」ってとこがよくわからないです

    セル番地のテキストってなんですか…?そのセル番地(A1とかなんとか)しか保存できないセルってことですか

    任意の文字・数字は入れられない感じすか


    真面目に向き合ってもできる気がしないがやるしかないんだなあ

  • 37二次元好きの匿名さん25/11/18(火) 01:47:49

    ぶっちゃけ初学者には向いてるようで向いていないのがC言語なんだ

    どうせ仕事では使わない…と思ってたらたまに奇妙な現場で使わされるのがキレそうになる

    Pro*Cとかいうカスは直ちに絶滅してくれ


    >>36

    大体そんな感じ?

    番号が振られた箱が一杯あるとしてその箱の番号を指定するのがポインタみたいな的な

    まぁもう何回か出てるなこの系の例え

  • 38二次元好きの匿名さん25/11/18(火) 01:51:19

    chagptに聞け
    普通の教師の何倍もわかりやすく教えてくれるから

  • 39二次元好きの匿名さん25/11/18(火) 01:52:28

    >>37

    本格的な開発じゃなければ

    ほぼ大半の言語は仕事で何かしら触る羽目になったなあ

    (障害の原因解析系のお仕事)


    世の中の言語の種類多すぎなんだよ

  • 40二次元好きの匿名さん25/11/18(火) 01:56:40

    >>39

    ぶっちゃけ慣れてくると大体の言語はコードの実物さえあれば何となくわかるのよね

    0から新規で作れみたいなこと言われると困るけど

    次の仕事の言語は○○ね!(未経験)(1週間後)みたいなことはよくあるよくあるクソが

    僕は3日でやったこともねぇPython覚えさせられて一人で現場放り込まれたのをN年経った今でも根に持ってます(怨)

  • 41二次元好きの匿名さん25/11/18(火) 02:08:22

    >>36

    要はポインタは住所だけしか載せないリスト


    例えばマンションで1軒ずつ訪問して1人しか住んでない部屋の番号だけメモに控えておくとする(このメモがポインタ)

    次に訪問したとき独り身の部屋にだけ『マッチング街コン』のチラシを入れたい

    ポインタに書いてある部屋番号を参照して上から順にポストインすればお仕事完了ってわけ

    1 203号

    2 204号

    3 305号

    (例)

    int x=俺 ←マンションに住んでる中の人

    int* p  ←これは住所用メモpを用意したという宣言

    p = &x  ←俺の住所をメモる pに203号と記入

    int y = *p ←住所メモpに書かれた部屋に訪問して中の人をメモ

          yには俺と記入

  • 42二次元好きの匿名さん25/11/18(火) 08:09:23

    >>36

    その認識であってるよ

    Excelは基本何でもセルに入れられるけどC言語は基本指定した型のデータしか保存できない

    (intなら整数のみ、charなら文字のみ、ポインタならアドレスのみ…)


    あとポインタの間接参照(*つけるやつ)はExcelのINDIRECT関数使うとイメージしやすいよ

  • 43二次元好きの匿名さん25/11/18(火) 08:40:26

    上で言われている通り手を動かして失敗するのがいいよフフフフフ

  • 44二次元好きの匿名さん25/11/18(火) 09:10:34

    goto hell

  • 45125/11/18(火) 14:10:48

    >>41

    このp = &xの部分では、x=俺 の部屋番地(203)をpに入れてるって認識でいいですか


    プログラミングは地獄?

    線形リストとかノードとか何言ってんの

    初心者向けの参考書に載ってないのやめろ

  • 46二次元好きの匿名さん25/11/18(火) 14:19:46

    >>45

    線形リストはメモリを賢く使う方法の一つだよ

    例えば蔵書管理しようと思ってタイトルとか構造体にしたとするじゃん?

    それを malloc で配列として確保したとするとサイズが小さすぎると溢れるし大きすぎるとメモリの無駄になる

    それに蔵書はなくなることもある

    そうした時にポインタの繋ぎ変えだけで蔵書を増やしたり減らしたりできる線形リストは便利なんだ

スレッドは11/19 00:19頃に落ちます

オススメ

レス投稿

1.アンカーはレス番号をクリックで自動入力できます。
2.誹謗中傷・暴言・煽り・スレッドと無関係な投稿は削除・規制対象です。
 他サイト・特定個人への中傷・暴言は禁止です。
※規約違反は各レスの『報告』からお知らせください。削除依頼は『お問い合わせ』からお願いします。
3.二次創作画像は、作者本人でない場合は必ずURLで貼ってください。サムネとリンク先が表示されます。
4.巻き添え規制を受けている方や荒らしを反省した方はお問い合わせから連絡をください。