2024年11月13日 第9回

  1. 得たアドレスは毎回変わっていたため,
    プログラムが始まってから終了するまでの一時的に作られるものだということがわかった.

    理解できましたね.

  2. ポインタに慣れるまで時間がかかりそうだと思った

    慣れは必要です.いろいろとトライしてください.

  3. ポインタについて理解することが出来ました.
    main関数でない別の関数で求めた値をmain関数で使うときのポインタの扱い方で手間取ってしまったので,
    復習してしっかり理解したい.

    理解できたのであればよろしいと思います.

  4. 今までの内容を深堀したような新しい内容だった.

    よろしいと思います.

  5. プログラムのイメージ自体にはなんら問題はないのに,
    scanfの&を忘れたりなどしょうもないミスを何回もしました.
    こういうミスを減らしたいのですが解決策を持ち合わせていないので,
    なにか良い方法は無いでしょうか.

    以前も言ったように思いますが,コンパイルエラーですからね.
    逆に言えば,コンパイラがミスを行ってくれて,
    それほど被害がないので,意識していないだけでしょうかね.

  6. 今回はコメントで動作を説明する課題があり,
    やってみると整理できてとてもいいなと思った.
    この行で~が代入されていて,ここで使われて,
    などごちゃごちゃになってしまいがちだった.
    また,何となく資料や教科書をなぞって書いて分かった気になってしまいがちだったので,
    1行1行考えながら書いていこうと思う.

    そうですね.理解したつもりになるのは,得ではないですね.

  7. 課題11で,実引数x,yはどちらも0.5なのに,
    アドレスが違うのはなぜなのか課題を作成しているときは不思議に思っていたが,
    値は同じでもそれが格納されている場所が違うならアドレスも違くなるのは当たり前だということに気づいた.
    また,コード内にコメント文を書くときや,
    動作の説明をするときに自分でも読み返してわかりにくいことがあるので,
    コードがかければそれでよしではなくて,文章力も必要だと実感した.

    その通りです.ぜひ詳しく書くようにしてください.

  8. 初め,ポインタの動画を見ているときは,
    ポインタの重要性に気づくことができていなかったが,
    実際にコードを書いてみるとポインタは非常に重要な機能であると学ぶことができた.
    前回,関数を学んでいるときに二つ以上の戻り値を作りたい場合は
    どうするのだろうということを考えていたので,
    今回完全ではないと思うもののやり方を学ぶことができてよかった.

    そうですね.このように戻り値をたくさん持ちたい場合の方法の一つですね.

  9. ポインタ,アドレスについて学習することができた.
    演習問題を通して,問題を解く(コードを書く)ことも大事だが,
    それがなぜ,どのようにして解けるのかを理解することが最も重要だと感じた.

    素晴らしい.うちのB4に聞かせたいですね.

  10. 本日はポインタについて学びました.
    特に重要なのは関数を用いて実引数と仮引数を宣言する際に
    ポインタと関節参照演算子を使うことが重要だとわかりました.

    その通りですね.よろしいと思います.

  11. 書いているうちに自分がいまポインタを触っているのか
    ポインタの指す変数の値を触っているのかよくわからなくなる.
    ポインタの宣言のときにアスタリスクをつけるけど,
    ポインタの値を表すときにもアスタリスクをつけることが原因だと思う.
    書いているうちに慣れればいいけど,しばらくしたらまた忘れそう.

    素晴らしい.そこが混乱するところですが,それに気づいているというのは 間違えることがないということですね.

  12. ポインタについて学んだ.
    関数内で複数の値を計算したとき (returnで返せない) に役に立つことがわかった.

    役立ちますが,少なくとも,誰かのコードが使われている場合に,
    何をやっているのかがわかる必要がありますので,理解してください.

  13. 何故そうなるのかの説明を求められる所で
    何と答えたらいいのか分からないことが多くありましたが,
    調べながら何とかとききれました.

    はて,どうやって調べたのでしょう?あと,一番大切なのは,本当に理解できた?

  14. ポインタがなぜあるのか事前学習の時点ではよく理解してなかったが,
    実際に演習をすることで利点をよく理解できた.

    よろしいと思います.

  15. ポインタそのものや活用方法の理解に少し手間取ってしまったが,
    課題を通して理解が深まったと感じた.
    今まで課題で行ってきたプログラムがポインタを用いることで楽になり,
    さらにプログラミングへの興味が増した.

    素晴らしい.

  16. 今日の講義では主にアドレスとポインタについて扱った.
    C言語で&が表すものがアドレスだと学び,
    しばらく疑問に思っていたscanfで変数に&を付ける理由が
    アドレスに入力した数値を格納することを指示しているためと分かりすっきりした.
    また,演習問題を通して代入におけるポインタの有用性を実感することができた.

    理解してくれてよかったと思います.

  17. 今回の課題において,ポインタ関連のエラーが多発した.
    なので,しっかり復習して繰り返さないようにしたいと思う.

    どのようなエラーでしたか?

  18. 今回の課題を行いながら,
    nilやSegmentation faultについて調べて学ぶことが出来て面白かったです.
    今後も,課題を行ったり自分で試したりして,
    エラーなどについても学んでいきたいと思いました.
    また,課題10について,(int *) は無くても実行出来たが,
    入れる必要があるのか気になりました.

    初期化しないといけないということですね.

  19. 今まで関数から持ってこれる値は一つだけだと思ってたのですが,
    今回の講義でポインタを使うことによりその問題を解決できると学びました.
    複雑な数式を複数回計算するコードにおいて関数をつかうことはとても重要だと思いました.

    そうですね.大切です,

  20. 今回の課題12では*をx_plus_y関数につければ,
    実行できたのですがなぜ*つけなければならないのかよく理解できなかった.
    最近の講義でこのように理解がよくできていないものが多くあるので,
    1つの問題で多くのことを吸収できるように,
    じっくり考えながら行いたいと思う.

    まず,分からないのであれば質問してもらのが良いでしょう.
    なぜポインタにする必要があるのかは,参照渡しとすべきだからです.
    講義資料,動画もみてください.

  21. 今回はアドレスとポインタ変数についての演習を行いました.
    "*"の記号に乗算を表す演算子,
    宣言する変数がポインタ変数であることを示す演算子,
    ポインタ変数が示すアドレスに入っている値を示す演算子,
    という3つの役割があり,
    それらを弁別する必要があったため,
    演習ではその点に留意しました.
    また,main関数で宣言した変数を他の関数で書き換えることは,
    実質的に複数の戻り値を持たせることができて便利である反面,
    プログラムが複雑化すると,
    どこで変数の値の変更が起きたのかわからなくなり意図せぬ挙動を引き起こしかねない危険があるため,
    慎重に扱う必要があると感じました.

    よろしいと思います.

  22. ポインタ変数を通じて変数の値を変更することや,
    関数内外でのメモリのアドレスの違いに気づくことができた.
    また,複数の整数を使って計算する課題では,
    関数の設計や引数の受け渡しを工夫することが大切だと思った.

    素晴らしい.

  23. 今回はポインタについて学んだが,
    講義動画を視聴するだけでは理解ができず,演習を経てもまだ理解できなかった.
    そのため,この範囲については理解できるまでしっかりと復習しようと思う.

    動画なので,繰り返し見ると良いのでは?
    時代は代わり,みなさんはZ世代 (or later?) と言われるようですが,
    幾何学に王道がないのと同じです.

  24. ;と,を混同してしまい,
    一見では分かりにくいことも相まって何分も詰まってしまいました.
    プログラミングでは大きなミスより気づきにくい小さなミスの方が怖い気がします.

    ,にしてしまったらどうなりましたか?どういうエラー?

  25. ポインタは少し複雑に感じましたが,
    うまく使えばプログラムがより効率的になると感じました.
    今後もポインタを使いこなし,
    もっと高度なプログラムに挑戦してみたいです.

    そうですね.そうしてもらうのが良いでしょう.

  26. 今回もしっかりできた.

    しっかり,ですか...

  27. 今回は関数に計算させるときに,
    仮引数をポインタにしなければいけない場面について学習することができた.
    今回はkadai12〜14でアドレスを引数として渡すということに気づくのに時間がかかった.
    関数内での計算による変更はメモリには反映されないことを今後注意する.

    講義動画をみてますか?

  28. ポインタ変数の扱いに慣れるのが難しかった.
    特に関数にポインタ変数を渡す場合の処理には苦戦したので,
    繰り返し手を動かして身に着けたい.

    そうですね.そうしてください.

  29. 今回の演習の課題4が興味深かった.
    結果から,後の方で定義された変数ほどアドレスの値が小さく,
    これはつまり,
    C言語はメモリ領域を高位アドレスのほうから低位アドレスの方へ順番に使っているということである.
    これには何か合理的な理由があるのだろうか?あるいは歴史的な背景などによるものだろうか?
    なんにせよ,C言語がメモリを使用している実際の姿に触れることができて面白かった.

    順番に詰めるからですかね.

  30. アドレスやポインタについて理解を深めることができた.
    途中コアダンプと言う現象が起きたが,
    これがどのような事態で起きるのか知りたく思った.

    segmentation fault (core dumped) ですね.まずいです.
    講義でも説明していますが,(講義動画をみた?)
    メモリ違反です.

  31. また新たなポインタという表現が出てきたため頭がこんがらがるが,
    これまで以上にフローチャートを気にしていきたい.

    その通りですね,流れを理解するのは大切です.

  32. 今回はポインタについて学んだ.
    pythonなどでは意識していなかったが,
    メモリの構造を考えると参照渡しをする理由も自然に理解できた.
    また,アドレスの番号を見ることでメモリと変数のデータ管理の理解が深まった.
    他の言語ではできない視点をこれからも得られるように演習していきたい.

    まぁ,情報工学科なので,他学科の人ができるものをこえるようにしておいたほうが
    良いと思いますよ.

  33. ポインタを用いた参照渡しでは実引数の操作を行ったり,
    引数が戻り値を兼ねるような働きをすることで関数から複数の変数を戻すことが可能になるなど,
    その利便性の高さを理解できた.
    間接参照演算子とポインタ変数の宣言に用いる記号が同じ*なので記憶しやすかった.

    理解してくれていますね.

  34. フィボナッチ数列の関数にどのようにポインタを適用しようか悩みましたが,
    最終的にはコーディングできたと思います.

    できたのであれば,よろしいと思います.

  35. はじめ,関数の代入に関してちゃんと理解せずに適当に*を付けてやっていたので,
    エラーが多く出てしまって時間の無駄になってしまいましたが,
    講義スライドをちゃんと見てみると数字の値を代入しているのか,
    アドレスの中の値を代入しているのかと考えてみればわかりやすかったです.

    そうですか.それはよかったですが,今後は適当にやらないほうがよいですね.
    もったいないよね.次回触れると思いますが,せっかく大学に来ているのにと思います.
    まぁ,みなさんには昭和の親父の戯言になっちゃうかね.
    どうでしょう.澤田先生.

  36. scanfで使っていた&の意味が分かった.
    ただコードがかけるだけでなく,
    仕組みの理解を進めていきたい.

    その考え方,C言語に限らず,これからもずっと持ち続けてください.
    そうすれば,世界を変えることができると思います.

  37. 関数と引数の部分が極めて複雑で理解できず,
    コンパイルエラーが繰り返し発生してもその原因がわからない,
    という状態になってしまった.
    今週中にどれがどれとどういう関係を持つのか,
    ということを自分で図に書きわかりやすく可視化するなど,
    何かしらの方法でじっくりと理解を進めたい.

    エラーとなるとメッセージがでますが,読んでいますか?

  38. いつもより理解して,
    プログラミングを進めることができた気がしてよかった.

    素晴らしい.

  39. 今回はポインタ変数と変数のアドレスについて学んだ,
    関数を使用する際に非常に役立つと思った.

    その通りです.

  40. 今回はアドレスやポインタについて学習しました.
    考察問題など教科書に載っていない内容を考える問題があり,
    処理の根本を理解しながら学習できてとても良かったです.

    理解できているようですね.

  41. 今回はなぜそうなるのかなどの原理を考える課題が多かったように思った.
    それを理解して今日習ったことを次も使いこなせるようにしたい

    ぜひそうしてください.

  42. いざ課題に取り組んでみると
    課題14のフィボナッチ数列を表示するもので躓いてしまった.
    まだまだポインタについての理解が浅いので復習して,
    自在に使えるようにする.

    そうしてください.

  43. 今回はポインタについて学習した.
    void型の関数で戻り値をポインタを用いることで使うことができるようになったが,
    いまいちint型やdouble型の関数との使い分けについて理解できていないので,
    調べてみようと思います.

    講義動画はみてくれましたかね.
    一つの変数の値を返す場合は,int型やdouble型の関数を用いるのでよいですが,
    複数の変数を戻したい場合は,ポインタを使うのは一つの方法です.

  44. 今回の演習はアドレスやポインタについて学びましたが,
    まだ十分に理解できていない部分もあったので来週までに復習しておきたいです.

    有言実行でお願いします.

  45. 今回の講義ではポインタやアドレスについて学びました.
    アドレスを学んだことによってscanfで&を付ける理由や変数を変更する際にショートカットができるなど,
    これからコードをより書きやすくする方法を学んだので使っていきたいです.

    そうですね.そうしてください.

  46. 今日の講義内容では,
    アドレス演算子と間接参照演算子について学んだ.
    今回の課題は今までに学んだ内容をたくさん使ったので,
    思考の整理になってよかった.

    よろしいと思います.

  47. 本講義では変数のアドレスとポインタについて学んだ.
    2回目あたりの授業で出てきていた変数の前につく&の存在について気になっていたので,
    これの招待について分かったのですっきりしました.
    また,授業の最後にアドレスとポインタの存在意義についても解説されていたので,
    個人的に持っていたモヤモヤが晴れて良かったです.

    それはよかった.

  48. これまでポインタという概念がいまいちしっくりきていなかったのだが,
    今回の授業で改めて一から考えてみることで,
    ようやく自分の中で納得することができたように思う.
    また課題13を行うときに,
    他の言語のように「配列そのものを関数の引数として渡す」ことが
    C言語ではできないことに気づくのに時間がかかってしまった.

    C言語でも,配列を関数の引数として渡すことはできます.

  49. 今回ポインタ変数を使ってみて,
    わざわざポインタ変数を使わなくても普通の変数で十分なように感じ,
    ポインタ変数がどのような場面で役に立つのか気になった.

    動画をみてますか?

  50. mainの中だけでポインタ関数を使うのは容易だったが,
    関数を引用しようとしたとき,
    その記号がそれぞれのコードの後何を表しているのかを整理するのが難しかった.
    実引数の操作のためポインタを用いるとき,
    基礎的な問題はできたがさらに他の要素を加えたときこんがらがってしまいてこずった.

    何をいいたいのか,かなり不明ですが,結局できたのですかね.

  51. 参照演算子は便利だが,
    使うとコードの中身が分かり辛くなってしまうと感じた.

    理解したらわかりやすくなると思います,

  52. 今回の課題では,
    日常的によく使う数にはアドレスが存在することを学びました.
    しかし,これが何に役立つのかまでは理解しえなかったため,
    もっと学習する必要があると思いました.

    使う数というのは変数のことですかね.日常的というのも意味不明です.

  53. 今回の課題はコードの一部分を考えることにフォーカスをおいたものが多かったため,
    一つ一つの課題にそこまで時間は取られませんでした.
    しかし,????で隠されているようなところはそのコードの大事な部分であったり,
    ポインタと引数の関係を理解できているかを問われているものが多く少し手こずりました.
    関数の引数とint mainの中で示した変数を絡めて使うのが最初は慣れなかったですが
    (関数を使う時の変数の前に&をつけたりする作業),
    だんだん慣れていき理解が深まったのでよかったです.

    「(関数を使う時の変数の前に&をつけたりする作業)」
    とありますが,大丈夫ですかね.

  54. 今回の内容でポインタやアドレスについて学べ,
    前回の関数と一緒に併用すると格段と計算などするときの構造を考えるのが楽になった.

    よろしいと思います.

  55. 今まで参照という概念を避けて通ってきました.
    今回ポインタを勉強して参照に非常に近いと思いました.
    今回習ったポインタはかなり理解できたと思いますが,
    一つ気になることがあります.
    おそらくポインタと参照は違うのですが,
    どのくらい違うのでしょうか.
    また,動画で参照渡しとおっしゃっていましたが,
    ポインタ渡しと参照渡しの違いはどこにあるのでしょうか.
    調べたのですがあまり理解できず納得のいく情報を得られませんでした.

    動画を再度みてください.説明しています.
    また,分からなければ質問してください.

  56. いま考えているのがアドレスの値なのかアドレス先の値なのかで
    途中混乱してしまう瞬間があった.
    改めて紙に書いて整理することの大切さを確認した.

    そうですね.効率を求めず落ち着いてやってください.

  57. プログラミングでは先を読みながら考えるのが大事だが
    まだ慣れていないうちは紙などに書くのが重要だとわかった.

    その通りだと思います.

  58. 今回のポインタの有用性をよく理解できた.
    ただ,変数に文字を入力することが久しく,
    改行文字について失念していたので,
    過去の内容についての復習も並行してやらなければならないと感じた.

    内容がかなり不明ですが,まずは演習問題をやってみましょう.

  59. コメント文を書く課題が難しかったので調べながら進めた

    何が難しいですか?

  60. 今回のポインタについて,
    演習問題を通して,
    参照渡しをする際に&を入れなければならないということについての
    理解を深めることができました.

    よろしいと思います.

  61. いままでは割と直感的に理解できてたけど,
    今回から概念が難しくなってきてじっくり考えないとわからなかった.
    あと暑かった.

    暑かったのであれば言ってください.
    あと,「直感的」などというのはやめたほうがよいです.外れるだけ.
    仮に当たったとしても,そういうのは再現性もなく,損をするだけです.

  62. どこに「*」や「&」を付けるのかしっかり理解した上で使えるようになりたいです.
    課題2と課題3はgcc -Wall -o のコマンドでコンパイルして実行しようと思ったらコンパイルすらできませんでした.
    場合によってはこのコマンドも使い分ける(-Wallをいれなかったり)べきだと感じました.

    「コンパイルすらできませんでした.」というのはどういう意味ですか?
    エラーがでて何もさきに進めないということ?

  63. アドレスと値とポインタの性質の違いを理解し上手くつかうことができた.

    よろしいと思います.

  64. 本日の講義では,
    課題12(void関数にアドレスを渡してアドレスを伝って元の変数の値を書き換える)が少してこずってしまったが,
    全体的には思っていたよりもすんなりと解くことが出来ました.
    また,コーディング中に気になったことなのですが,
    自分は心配性なのでコードを書く際にほぼ必要ないけどより安全にするための余分な処理を書いてしまいます.
    (例えば,連続するif文があった場合の残ったすべての範囲をカバーする最後のelseを
    一応バグの可能性を考えてifをつけて条件分岐させるかなど).
    この場合はより効率化を目指して余分なことはしないコードと,
    万が一を考えて一応のコードを書いておくもの,
    どちらが良いと思いますか?もし,
    宜しければ教えてください.

    実際のコードを見せてもらわないと,万が一を考えてというのを理解できていないので,
    正しい答えにはならないかもしれませんが,間違いあるのはまずいので,まぁ後者ですかね.

  65. アドレスの使い方がいまいちわかりませんでした使う場面とかを調べたいです

    講義動画をみてください.

  66. 明示的にアドレスを渡すことで参照渡しのようなことを行えるのは便利でありかつ,
    明示的であるためにバグを生みにくそうだと感じた.
    配列について調べたところ,
    それ自体がポインタであると知り,
    関数の引数として配列を渡した時,
    値渡しと勘違いしてバグが発生しそうだとも感じた.

    理解できたら勘違いすることはないでしょう.

  67. 初めにポインタを学んだ段階では,
    どのような目的で用いるのかわからなかったが,
    関数から2個以上の変数を戻したいときに必要だと学ぶことが出来た.

    方法の一つですね.

  68. 前回の関数の内容が組み合わさっている問題があり,
    今までの復習はしっかりと行おうと思う.
    今日まで習った範囲のC言語は,
    ほとんど頭に入っている方がいいですか.

    それはそのほうがいいに決まってますね.

  69. ポインタを用いることで関数から複数の引数を戻すことができ便利だった.
    一度ポインタを経由することでこれまでできなかったことができるようになった.

    よろしいと思います.

  70. 今回の演習の課題9と10で,int *p=(int *)NULL;と書かれていたことに疑問を抱いた.
    後に*pの値が決定されるので,NULLとかく必要がわからなかった.
    形式的にNULLと書いておいた方が間違えにくいということでしょうか?

    初期化しておかないと,まずいでしょう?

  71. 課題の13のように関数の中で間接参照演算子と積が両方出てくるような場合には
    間接参照演算子にカッコをつけて計算するのが無難だと感じた.
    nullにはnull文字としての使い方と初期化するための使い方があることはとても良い学びだった.
    int( *)NULLを応用して他の型にも対応できるのでよく覚えておきたい

    そうですね.混乱しないように,間違えないようにすることが大切です.

  72. 今回の内容は理解するのに時間がかかった.
    &a,pa,*paなどの新しいことが多く,
    頭が混乱してしまった.

    動画をみましたか?

  73. 課題4にて以下のようにすると無理やりですが帰納的にprintfで出力を行えました.
    関数を作る際,引数に色々な型が入る点と色々な型の変数を
    for文などで帰納的に代入していく方法が難しかった(わからない)です.
    前者の引数にいろいろな型の変数が入るものへの答えとして組んだマクロに関しては満足したのですが,
    後者の色々な変数をfor文などで帰納的に代入していく方法に関して,
    より良い方法があれば教えていただけると幸いです.

    まず,「以下のようにすると」とありますが,それがないので答えられないです.
    また,「帰納的に」とがいまいち理解できていませんが,
    (順番にということ?)いずれにしても質問があれば, 具体的なものを持って直接来てもらうほうが良いでしょう.

  74. 2つ以上の変数を関数から戻したい時の方法はずっと疑問に思っていたが,
    今日の内容でそれが解決した.
    コンピュータ内のメモリの位置と間隔を考察する課題は,
    コンピューター内部の動作を見ることができたようで,
    とても興味深いものだった.

    よろしいと思います.

  75. 今日の講義でポインタの概念と使い方について学びました.
    理解するために時間かかりましたが,
    やっと理解できたとき満足しました.
    ポインタの他の使い方と,
    アドレスの意味についてもっと学びたいです.

    理解できたのであれば素晴らしい.

  76. a,&a,*aなど,
    見た目は似ているが意味や使い方が異なる変数や型を混同してしまい,
    エラーが起きる場面が多々あったのでどの記号がどのような意味を持つのか
    丁寧に考えながらコードを打っていくことが大切だと感じた.

    見た目が似てますかね...

  77. ポインタはうまく使えばコードをすっきりと書けるようになると思った.

    そうですね.

  78. long intの場合は%dの間にlが必要であることを学んだ.
    また,関数を定義して利用するときにmain関数内で出力する場合に
    何度も値が変になってしまいそこで苦戦してしまった.

    変になる?

  79. 今回はアドレスのことやポインタについて学びました.
    Pythonなどには(恐らく)ないこのC言語独特の概念を理解するのに動画だけだと難しかったですが,
    演習を通して少しずつ理解することができました.

    ありますよ.見た目に見えないようにしているだけです.

  80. 今回の課題12,13,14では仮引数と実引数を使いましたが,
    *と&をつけることによって何が起こっているのかよく理解できなかったのでよく復習したいと思います.

    分からなければ質問してください.

  81. ポインタを用いることでvoid型関数からでも数値を受け取ることができることを学びました.
    関数やループ文などのほぼ同じ結果を出すが,
    少し機能が違うものが多くなってきたので,
    整理して使い分けていきたいです.
    またポインタに代入する際に&を忘れることが多々あったので気を付けたいです.

    忘れたらエラーがでないですかね.

  82. 今回の課題は授業時間内に終えることが出来た

    了解しました.