- 1二次元好きの匿名さん25/11/17(月) 14:57:04
- 2二次元好きの匿名さん25/11/17(月) 15:00:33
大学の必修くらいの内容なら参考書の
該当箇所ひたすらコピペして感覚掴んだ - 3二次元好きの匿名さん25/11/17(月) 15:02:57
どこがどうわかんない?
教えられるぜ - 4二次元好きの匿名さん25/11/17(月) 16:04:56
色々ありすぎるのでおすすめの参考書など教えてくださると嬉しいです。
主に再帰の応用(スタックとかなんとか)とポインタ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
- 9二次元好きの匿名さん25/11/17(月) 16:15:50
本屋でC++の本立ち読みしてコード覚えて帰って、あとはひたすらネット漁りながらコード書いてるうちに覚えたな
結局作りたいものが無いうちは覚えられないし身に付かないだろう - 10二次元好きの匿名さん25/11/17(月) 16:18:56
自分はC言語じゃなくてPythonだったけどまさに書いてエラー吐いて直してを繰り返してどうにかしたよ
時間があるからできたことだと思うのでそのまま同じようにやれって言うつもりはないけど
ある程度は数をこなす覚悟が必要だと思う - 11二次元好きの匿名さん25/11/17(月) 16:20:22
cppを今後使わなくても考え方は使えるからちゃんとやったほうがいいよ
- 12二次元好きの匿名さん25/11/17(月) 16:22:14
ポインタ教えてくれたコマに出された課題をもう一回自分でやるとか
わかってる友達に教えてもらいな
内申点も稼ぎたいなら先生に聞くと印象良くなるぞ - 13二次元好きの匿名さん25/11/17(月) 16:23:13
本はこれがおすすめ
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
構造体はいろんな型を一つの型にまとめてひとかたまりのメモリにおけるようにしたもの
例えば三次元ベクトルを表すとして
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
プログラミングの巧拙に学歴関係ないんで……
- 23二次元好きの匿名さん25/11/17(月) 16:52:28
このレスは削除されています
- 24二次元好きの匿名さん25/11/17(月) 16:55:24
- 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
- 29125/11/17(月) 19:31:08
- 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
- 37二次元好きの匿名さん25/11/18(火) 01:47:49
- 38二次元好きの匿名さん25/11/18(火) 01:51:19
chagptに聞け
普通の教師の何倍もわかりやすく教えてくれるから - 39二次元好きの匿名さん25/11/18(火) 01:52:28
- 40二次元好きの匿名さん25/11/18(火) 01:56:40
ぶっちゃけ慣れてくると大体の言語はコードの実物さえあれば何となくわかるのよね
0から新規で作れみたいなこと言われると困るけど
次の仕事の言語は○○ね!(未経験)(1週間後)みたいなことはよくあるよくあるクソが
僕は3日でやったこともねぇPython覚えさせられて一人で現場放り込まれたのをN年経った今でも根に持ってます(怨)
- 41二次元好きの匿名さん25/11/18(火) 02:08:22
要はポインタは住所だけしか載せないリスト
例えばマンションで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
その認識であってるよ
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
- 46二次元好きの匿名さん25/11/18(火) 14:19:46
線形リストはメモリを賢く使う方法の一つだよ
例えば蔵書管理しようと思ってタイトルとか構造体にしたとするじゃん?
それを malloc で配列として確保したとするとサイズが小さすぎると溢れるし大きすぎるとメモリの無駄になる
それに蔵書はなくなることもある
そうした時にポインタの繋ぎ変えだけで蔵書を増やしたり減らしたりできる線形リストは便利なんだ