【C言語】初心者向け ポインタはエクセルで説明すると簡単に分かる説【VOICEVOX】【プログラミング】

แชร์
ฝัง
  • เผยแพร่เมื่อ 24 ธ.ค. 2024

ความคิดเห็น •

  • @tetrapo
    @tetrapo 6 หลายเดือนก่อน +25

    銭湯のロッカーと鍵みたいなもんだと理解してる、ポインタは番号の書かれた鍵でロッカーの中身が取り出せる
    二重ポインタはロッカーの中に別のロッカーの鍵が入っているイメージ

  • @なかむら-p9j
    @なかむら-p9j 6 หลายเดือนก่อน +20

    ポインタ、要するに「変数そのものを指す。中身はその変数のアドレス」ってだけなんだけど、理解するまで苦労したわ
    何に使うのかサンプルコードからはまったく分からなくて、データ構造とか学びだすとめっちゃ便利!ってなって感動した記憶がある

    • @あぴよん-i5h
      @あぴよん-i5h หลายเดือนก่อน

      80年代にアセンブラから入ったんでC言語はまったく難しくなかったですね~

    • @駄犬-q1j
      @駄犬-q1j 17 วันที่ผ่านมา

      ポインタがわからない人ってそもそも変数を何と思ってるのか謎

  • @岡本裕俊
    @岡本裕俊 4 หลายเดือนก่อน +30

    むしろC言語から他の言語に行くとポインターが無かったり関数の引数が値渡しなのか参照渡しなのか分からなくて混乱しました。。。

    • @resistan-y1h
      @resistan-y1h 3 หลายเดือนก่อน +7

      数値と文字型が値渡しで
      配列やオブジェクトや関数は参照渡し
      という言語がほとんどかな。

    • @Akita_ken2236
      @Akita_ken2236 2 หลายเดือนก่อน +4

      Python始まりだったから、b[]=a[]のコード書こうとすると挫折しちゃいまして

    • @駄犬-q1j
      @駄犬-q1j 17 วันที่ผ่านมา

      ​@@resistan-y1hそれ何言語ですか?そんな言語見た事ないっす

  • @tatsunokokendu
    @tatsunokokendu 3 หลายเดือนก่อน +3

    めちゃわかりやすいです。天才

  • @Libertas011
    @Libertas011 6 หลายเดือนก่อน +4

    そもそもポインタがどのようなものか知りませんでしたが、とても分かりやすかったです。

  • @あうら-g2j
    @あうら-g2j 6 หลายเดือนก่อน +25

    ポインタがわかりにくいのではなく、ポインタの書式がわかりにくい、というのもよく言われる話ですね。
    『int* p;(intへのポインタ型の変数p)』と解釈してしまうと、『int* p = &a;』を見た時に「ポインタ型は*なのにポインタ型を作る時は&なのはどういうこと?」となってしまうけれど、
    『int (*p);(*pがint型になるような変数p)』とさえ理解できれば『int *p = &a;』は「pは*pがint型になる。*&aはint型。よってp = &aは当然」までは理解できる。ただし「int (*(p = &a));ならわかるけど、実際にはそれだとコンパイルが通らなくてint (*p) = &a;ならコンパイルが通るのはどういうこと?」という疑問は残り続けます。
    これを解消するには、「C言語の変数宣言は『型名 変数名;』である」という認識を打ち破って、「C言語の変数宣言は『型名前半 変数名 型名後半;』である」という理解をできるようにならないといけません。典型例が中級者でも躓く関数ポインタで、関数 int f(int) に対するポインタ変数の宣言は『int (*pf)(int);』となることから、変数名は型名の後ではなく型名の中にくるものであることがよくわかります。
    あと、『int *p, q;』だと『*pがintであるような変数pと、qがintであるような変数q(つまりpはポインタ型でqはint型)』になるのもわかりにくさに拍車をかけているところ。

    • @resistan-y1h
      @resistan-y1h 3 หลายเดือนก่อน

      Go言語のポインタはそこら辺改善した文法にしたようですね。

  • @onigiriomusubi5704
    @onigiriomusubi5704 หลายเดือนก่อน +3

    C言語の関数仕様は「参照渡し」ではありません。原則すべて値渡しです。ポインタを使った場合、あたかも参照渡しのように見えますが、実際には仮引数と実引数は値渡しでポインタ変数が渡されています。なのでポインタを引数に渡す場合、なんちゃって参照渡しとでもよぶべきか・・・?

  • @amatsuki3701
    @amatsuki3701 6 หลายเดือนก่อน +10

    エクセルすごいいい例えやな
    セルをメモリに見立てるってことやんな

  • @hi-vw1rm
    @hi-vw1rm หลายเดือนก่อน +2

    ポインタは変数のアドレスを値としてもつって理解したら簡単になった。

  • @デラックス超
    @デラックス超 5 หลายเดือนก่อน +3

    「ぐへへ、実は裏ルートがあるんだぜ。こうするんだよぉ!」って妄想しながら書いてた
    そしてC言語のポインタと構造体のせいでjavaのインスタンスと参照が理解できず泣いてた

  • @すかー-y4e
    @すかー-y4e 6 หลายเดือนก่อน +2

    この辺は行列の内積とかを自分で実装するとメッチャ理解度上がる。
    速度比較するとさらに有り難みも分かる。

  • @user-bp7fy2qp9m
    @user-bp7fy2qp9m 6 หลายเดือนก่อน +7

    C言語は高級アセンブラなのに、変に抽象化して教えるから理解出来無い人が出てくる説。
    エクセルの説明では、一つのデータが複数記憶されていることになるので、将来に禍根を残しそうな。

  • @neko09cat
    @neko09cat 6 หลายเดือนก่อน

    C++やってるSNCTのkosen23sですがCでもC++とポインタの感覚は全く変わらないと思いつつC++はCと互換性あるからそりゃそうかって思いながら自分の中で改めてポインタを理解し直しました

  • @ろぜぃ-j2p
    @ろぜぃ-j2p 2 หลายเดือนก่อน +1

    C言語は難しいプログラミング言語としてよく上げられていますが、C言語自体が難しいのではなく、特有の機能や概念をどのように活用してコーディングするのが難しいと私は思います。

  • @あぴよん-i5h
    @あぴよん-i5h หลายเดือนก่อน

    ちょっと詳しい人だと
    ポインタを配列として書いたり、配列をポインタとして書く人が居たりするけど
    あれって最適化で逆に遅くなる事があるんだよなぁ。

  • @ああ-j7y4n
    @ああ-j7y4n 11 วันที่ผ่านมา

    Excelの例えは値渡しですね

  • @eaaljant4890
    @eaaljant4890 24 วันที่ผ่านมา

    インスタンスをそのまんま渡してるって認識で良いのかな?

  • @mimiqrr
    @mimiqrr หลายเดือนก่อน

    Excelを使う説明、興味深く拝見させていただきました。
    カンが良い初学者はこの説明が理解の助けになるかもしれないですね。
    ただ、よろしくない方は「セル参照して値を得る」を「セルの値を得る」と解釈して理解が進まないかも、です。
    ※Excelでの話であれば彼ら的には「セルの値を得る方法」でしかなくなり参照やポインタの考え方に結びつかなくなるのです…

  • @phononmaser1024
    @phononmaser1024 6 หลายเดือนก่อน

    是非続きを!!

  • @toumorokoshi111
    @toumorokoshi111 6 หลายเดือนก่อน

    サムネ見た瞬間にその手もあったか!ってなった

  • @ひゅい-x5w
    @ひゅい-x5w 6 หลายเดือนก่อน +4

    値渡しもエクセルで説明してくれないとわからないです。

    • @NelneL_1868
      @NelneL_1868 6 หลายเดือนก่อน +3

      値渡しはエクセルで言いますと、「ある1セル内に格納されているデータのみを渡す事」に近いと考えます。
      1セルには書式や数値、テキストを格納できますね。その「格納した書式、数値、テキストのみを渡すのが値渡し」になります。
      ここで渡されるのはあくまでセルの中のデータのみなので、受け取った後の独立したデータに編集を加えても渡した側には影響がないことになります。これが参照渡しとの違いかと考えます。
      長文大変失礼しました。

  • @POPGAMING1234
    @POPGAMING1234 5 หลายเดือนก่อน

    いまだにC言語のポインタってつかわれてるんだ

    • @ryu2543
      @ryu2543 หลายเดือนก่อน +3

      逆に使わない方法があるのか…

  • @荻野憲一-p7o
    @荻野憲一-p7o 5 หลายเดือนก่อน +1

    アセンブラで書いたことがない人にCで書かせようってのが無理ゲーなんだが...
    メモリにはアドレスがついてるってとこだけ理解させようってんなら、
    エクセルで説明するのも悪くない。
    エクセルのアドレスって、セルの内容として入れられるんだっけ?
    ポインタをエクセルで説明するなら、それが必要そうだけど。

    • @resistan-y1h
      @resistan-y1h 3 หลายเดือนก่อน

      自分はマイコンのアセンブラの知識で入ったら
      ポインタに型があるってなんやねんってなったw
      インクリメントしたら型のサイズ分いっきに増加するのも知らなかったし。
      まあ、でもいきなりCよりは理解できたw

  • @piccadillylily
    @piccadillylily หลายเดือนก่อน

    「ポインタ」と呼ぶのが失敗してると思っています。「アドレス」と呼べばトラブルは少ないと思うのですけど、不都合は無いのかな?
    エンディアンとかアライメントとかがアドレッシングと密接な関係にあるので、そこを「ポインタで」と言われると混乱する気がします。
    Pythonを書いてみたらポインタ的な考えが無いので凄く気持ちが悪いですね。「今、この変数は、何処に居るの?」と云う不安。
    組み込みでは物理アドレスへの変数の配置を気にしながらソースを書いたりしますが、例えばメモリ使用量削減とか高速化でポインタとか更にポインタのポインタが使えてintとcharを
    チャンポンしたりとかもできたりしますので、かなりメリットは大きいですね。
    C#でもポインタが無くなったと聞いてコードを組んでみたら、「ポインタという用語が無くなった」だけでbyRefだっけ?何だっけ、、、無茶苦茶使い難くなっててウンザリしました。
    結局はPythonで完成したコードも例外除去が出来そうに無かったので、Cで書き直してチャンチャン。
    ポインタさまさまですね。

  • @Tiaki_Nakamura
    @Tiaki_Nakamura 2 วันที่ผ่านมา

    なんかJavaみたい、でもなんか書き方が堅っ苦しいな
    例えるなら、分かったって言えば良いのに承知しましたって言ってるみたい

  • @Takedakatuyori
    @Takedakatuyori 6 หลายเดือนก่อน +5

    C言語とアセンブラ言語って似ているから私的にはJava より簡単に感じます。私の専門cobol ですがw

    • @nagsa_lino
      @nagsa_lino 6 หลายเดือนก่อน +2

      c言語使ったことあるけど全然文法やらシステムから違うから全然難しいぞ(Javaとの比較は触ったことないのでできないが)

  • @地球の皆さんどうぞよろしく
    @地球の皆さんどうぞよろしく 6 หลายเดือนก่อน

    大体ポインタ辺りの学習で挫折する人が多い

    • @resistan-y1h
      @resistan-y1h 3 หลายเดือนก่อน

      アセンブラを軽く学んだ方がいいよなー

    • @user-sabasabpsabasabasabasaaba
      @user-sabasabpsabasabasabasaaba วันที่ผ่านมา

      @@resistan-y1h基本情報で十分では?

  • @tdm2965
    @tdm2965 18 วันที่ผ่านมา

    普通に、コンピュータの仕組みのお勉強をしたらいいように思うけどね。

  • @sy-cg7te
    @sy-cg7te 2 หลายเดือนก่อน

    C言語は物理メモリのアドレスを直接扱う為の言語、という基本前提も同時に学ばないと理解が進まない。
    物理メモリやペリフェラルなどを直接扱わないソフトウェアならC言語を使用すべきではない。

  • @YO-ec7if
    @YO-ec7if 6 หลายเดือนก่อน

    C言語のポインタは難しいと認めたほうが、逆に早く習得できる気がします。

  • @codergreen6131
    @codergreen6131 3 หลายเดือนก่อน

    Cの文法、特にアスタリスク記号に複数役割を持たせているのが沢山の初学者が苦労する原因だと思う

  • @ドリームマスター-g5z
    @ドリームマスター-g5z 6 หลายเดือนก่อน +2

    あ、これは自分もそう思う。なんでC言語の解説書ってあんなに判りにくいんだろ?って思ったよ。
    かなり昔にC言語を独学で勉強してたけど、確かにポインタのところで悩んだ記憶がある。
    確か記憶領域内のアドレスだっけか?の場所で変数を取得するんだっけ?忘れたなw

    • @resistan-y1h
      @resistan-y1h 3 หลายเดือนก่อน +2

      C++の犬はワンと鳴いて
      猫はニャーと鳴くとかいう
      クラスの説明はガチで意味わからんかったからそれよりはましだが難しくはあるよな。
      オブジェクト指向は構造体の延長で教えた方が理解できる。
      同じように
      ポインタはアセンブラから学んだ方がいいかな。