【新しいC言語講座】ポインタを関数の引数に渡す

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

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

  • @チャンズンゴン
    @チャンズンゴン 8 ปีที่แล้ว +37

    これはすごく分かりやすい
    なぜ、ポインタを使わなければいけないのかが理解できる

    • @kanoinfonet
      @kanoinfonet  8 ปีที่แล้ว +3

      お役に立てれば幸いです(^v^)

  • @ab-yy7zj
    @ab-yy7zj 2 ปีที่แล้ว

    2022年に見てるけど、youtubeで1番わかりやすいポインタ説明動画だと思う

  • @ずーまろ-q2l
    @ずーまろ-q2l 4 ปีที่แล้ว +7

    まだC言語を学び始めたばかりなのですが、革命的に分かりやすいです。
    ありがとうございます。

    • @kanoinfonet
      @kanoinfonet  4 ปีที่แล้ว +3

      革命的ですか😅 お役に立てればうれしいです。

  • @西村ひろゆき-m8q
    @西村ひろゆき-m8q 8 ปีที่แล้ว +21

    こんな分かりやすい講義初めてw

    • @kanoinfonet
      @kanoinfonet  8 ปีที่แล้ว +3

      お役に立てたならうれしいです(^^)/

  • @近藤K-y9w
    @近藤K-y9w 3 ปีที่แล้ว +2

    この動画で理解して、わすれて、また見にくる
    これを何回も繰り返せばポインタなんか怖くない!!

    • @kanoinfonet
      @kanoinfonet  3 ปีที่แล้ว

      何度でも見て下さい(^v^)

  • @omo1111
    @omo1111 7 ปีที่แล้ว +5

    ここ数日、理解できずに苦しんでいたポインターについて
    理解できました!!!
    同僚にも紹介します

    • @kanoinfonet
      @kanoinfonet  7 ปีที่แล้ว +2

      ありがとうございます。どんどんお知り合いにお知らせください(^^)/

  • @リョウタ-t9o
    @リョウタ-t9o 4 ปีที่แล้ว +1

    Golangを勉強しているものです。3年前の動画ではありますが、ポインタについて全く理解できる色々サイトを当たっていたのですが、この方の動画をみて腑に落ちました。ありがとうございます!

    • @kanoinfonet
      @kanoinfonet  4 ปีที่แล้ว

      ご視聴ありがとうございます。お役に立てたならうれしいです(^v^)

  • @ぽぽぽ-i9f
    @ぽぽぽ-i9f 6 หลายเดือนก่อน

    見れば見るほどポインタがわからなくなったけど、これで理解できた

  • @komekomeshop
    @komekomeshop 4 ปีที่แล้ว +5

    あぁ、すごくわかりやすい…😭
    分かるのがとても楽しい…
    ほんとにありがとうございます🤩

    • @kanoinfonet
      @kanoinfonet  4 ปีที่แล้ว

      わかるのが楽しいとは素晴らしいですね! お役に立ててうれしいです(^v^)

  • @sousimikado9284
    @sousimikado9284 3 ปีที่แล้ว

    先達が「Cはポインタで心が折れそうになる」と言っていた通り、私も学び始めてポインタで躓いていました。
    この動画のおかげで基礎がつかめた、気がします。ありがとうございます。
    書籍も購入してみようと思います。

    • @kanoinfonet
      @kanoinfonet  3 ปีที่แล้ว

      お役に立ててうれしいです。ポインタは確かに難しいところなので、私もできるだけわかりやすく丁寧に説明するように心がけています。
      書籍の方も役立てていただけると、頑張って書いた甲斐があります。ありがとうございます (^v^)

  • @kotone-tsukishiro-japan16-fx99
    @kotone-tsukishiro-japan16-fx99 2 ปีที่แล้ว +1

    とても分かり易です。

  • @MONARIZA681
    @MONARIZA681 2 ปีที่แล้ว

    大学1回生です。独学で勉強しています。書籍では分かりにくかったのでとても助かりました

    • @kanoinfonet
      @kanoinfonet  2 ปีที่แล้ว

      お役に立てたなら幸いです😊

  • @MM-iy9mx
    @MM-iy9mx ปีที่แล้ว

    すごく分かりやすい!感謝しかない…

  • @lotuspine2531
    @lotuspine2531 4 ปีที่แล้ว +2

    分かりやすすぎる。。。ありがとうございます!

    • @kanoinfonet
      @kanoinfonet  4 ปีที่แล้ว

      お役に立てたならうれしいです(^v^)

  • @takitaki2918
    @takitaki2918 9 ปีที่แล้ว +6

    すごい!有難うございます!!!

    • @kanoinfonet
      @kanoinfonet  9 ปีที่แล้ว +1

      Taki is my nickname お役に立てたならうれしいです (^v^)

    • @takitaki2918
      @takitaki2918 9 ปีที่แล้ว

      和情報網 ぜひ続編を作って欲しいです。。

    • @kanoinfonet
      @kanoinfonet  9 ปีที่แล้ว +1

      Taki is my nickname
      テキストのどのあたりが分かりにくいとか教えてもらえると
      次に作る動画の参考になります。
      短い動画でも、1本作るとなると結構労力がかかるので、
      なかなか個別のご期待には添えないのが心苦しいのですが…
      ご希望は出してもらえればといつも思っています。

    • @takitaki2918
      @takitaki2918 9 ปีที่แล้ว +2

      和情報網 いえいえ、勝手を言ってしまいました。動画の完成度が非常に高いですものね。無料配信するのは、大変です。

    • @kanoinfonet
      @kanoinfonet  9 ปีที่แล้ว +2

      Taki is my nickname
      ご意見はいつでも歓迎ですので、こんなのあったらなぁという話は是非お願いします (^v^)

  • @yuyo1153
    @yuyo1153 3 ปีที่แล้ว +1

    今年からエンジニアになりました。
    研修でC学んでます。
    煮詰まったときはいつも参考にさせていただいております。
    会社の講師より分かりやすくて助かります笑

    • @kanoinfonet
      @kanoinfonet  3 ปีที่แล้ว

      お役に立てればうれしいです(^v^)

  • @KK-en1vx
    @KK-en1vx 3 ปีที่แล้ว

    電子テキスト購入させてもらいました。
    簡潔にまとめられててほんとにわかりやすいです! ありがとうございます!

    • @kanoinfonet
      @kanoinfonet  3 ปีที่แล้ว

      お役に立てたならとてもうれしいです。十分にご活用いただければと思います(^v^)

    • @KK-en1vx
      @KK-en1vx 3 ปีที่แล้ว

      @@kanoinfonet テキストの演習問題の解答
      サンプルコードなどはどこかにありますでしょうか? 所々気になるものがあるんですが。

    • @kanoinfonet
      @kanoinfonet  3 ปีที่แล้ว

      @@KK-en1vx 学校の授業などで受講者にやってもらう演習として使えるようにするために、あいにく解答例はご用意してないんですよね……ご不便をおかけしてすみません。これ、教科書を出版するときにいつも悩ましいところなのです。ご理解いただけると幸いです(_ _)

    • @KK-en1vx
      @KK-en1vx 3 ปีที่แล้ว

      @@kanoinfonet なるほど。たしかに解答載せちゃうと、授業で提出課題として課せなくなってしまいますね。
      返信ありがとうございます。頑張ります!

    • @kanoinfonet
      @kanoinfonet  3 ปีที่แล้ว

      @@KK-en1vx いつもこの件は心苦しいのです……応援してますので頑張って下さい。

  • @あぴよん-i5h
    @あぴよん-i5h 4 ปีที่แล้ว +4

    入れ替えと言えば
    a = a xor b
    b = a xor b
    a = a xor b
    でやると一時変数不要だった。(同様に引き算だけでもできるがマイナス値で問題あったかな)

  • @rargo-acappella
    @rargo-acappella ปีที่แล้ว

    授業よりわかりやすいです!

    • @kanoinfonet
      @kanoinfonet  ปีที่แล้ว

      あら、そうですか。助けになったならうれしいです😊

  • @たっけん-x4l
    @たっけん-x4l 5 ปีที่แล้ว +1

    わかりやすかったです

    • @kanoinfonet
      @kanoinfonet  5 ปีที่แล้ว

      それはよかったです(^v^)

  • @ストーブ2電気
    @ストーブ2電気 3 ปีที่แล้ว

    すごく分かりやすい!

    • @kanoinfonet
      @kanoinfonet  3 ปีที่แล้ว

      ならばよかったです(^v^)

  • @鷹右衛門
    @鷹右衛門 4 ปีที่แล้ว +4

    2:46
    5:18自分用に書いときます

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

    矢印と箱による説明では、言い方を工夫しても解らない人には永遠に解らない。
    初学者にCのポインタを理解させるためには、メモリとそのアドレスを理解させること。
    遠回りのようでも、一度アセンブラを経験させることだと思うのだけれど。

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

      それは確実なやり方の1つでしょうね。
      私も長くC言語を教えています(いました)が、アセンブリ言語に踏み込むとその分だけ覚えることが増えるので、学習効果としては長短分かれる、と感じています。どの説明がわかりやすいかは学習者によるため、私の説明の仕方でわかってくれる人がいればそれでいいですし、もしわかりにくければ、いくらでも他の本や動画がありますので、いいかなぁと……
      ちなみに私は今のところ、アセンブリまでは説明しないけどメモリとデータの格納については説明する、くらいのところを選択しています。このシリーズで言うとこのあたりです:th-cam.com/video/KgzfjriHNOc/w-d-xo.html

  • @kiyoshi0119
    @kiyoshi0119 4 ปีที่แล้ว

    値渡し、参照渡しですね。

    • @kanoinfonet
      @kanoinfonet  4 ปีที่แล้ว +1

      はい、そうですね。C言語の引数渡し方式は値渡しのみなので、ポインタ値を渡すことで参照渡しを実現していると言ってよいと思います。

  • @hipopo_tamagawa
    @hipopo_tamagawa 6 ปีที่แล้ว

    ループのカウンタ変数iやjはよく見かけますが、ポインタ変数では*pや*qを慣例的に使うというのを初めて知りました。

    • @kanoinfonet
      @kanoinfonet  6 ปีที่แล้ว +4

      英単語から短い変数名をつけるというのは昔から行われているようです。
      ポインタpointerならp, qなのと同様に、
      整数integerはi, j, k(あとはnumberからn, mとか)、
      配列arrayはa、
      文字characterはc、
      文字列stringはs, t
      ……なんてのがC言語ではよく使われるみたいです。

  • @中山慎一-v1y
    @中山慎一-v1y 6 ปีที่แล้ว +1

    大変よく分かります。図で紹介されているのが、特にわかりやすいです。この続きなどはないのでしょうか?あれば教えてください。是非お願いします。

    • @kanoinfonet
      @kanoinfonet  6 ปีที่แล้ว +1

      残念ながらこのシリーズでは続きを作っていません……。大学の授業向けに作った動画があって、そこにポインタの演習の解説があります。本シリーズとは違ってゼロからの説明ではないのですが、参考にはなるかも知れません:
      bit.ly/ProIImovies
      bit.ly/ProImovies

  • @jif7707
    @jif7707 5 ปีที่แล้ว

    わかりやすい

    • @kanoinfonet
      @kanoinfonet  5 ปีที่แล้ว

      お役に立てれば幸いです(^v^)

  • @sn7690
    @sn7690 3 ปีที่แล้ว

    とてもわかりやすく、いつも見させていただいています。
    ポインタはグローバル変数と同じ使い方ができるということなのでしょうか?

    • @kanoinfonet
      @kanoinfonet  3 ปีที่แล้ว +2

      グローバル変数だとどの関数からでも見えてしまいますが、ポインタを関数から関数へ渡すと、そのお互いだけが変数の領域にアクセスできるので、おかしな事故(どこかで意図せず変数の内容を書き換えてしまったりとか)が起きにくい、わかりやすいというメリットがあります。

    • @sn7690
      @sn7690 3 ปีที่แล้ว

      @@kanoinfonet なるほど!!ありがとうございます!

  • @ワカサトー
    @ワカサトー 4 ปีที่แล้ว

    めちゃめちゃわかりやすいです!
    普段投稿者さんは何をなさってるんでしょうか?
    気になります!

    • @kanoinfonet
      @kanoinfonet  4 ปีที่แล้ว +2

      ありがとうございます(^v^)
      今はなぜか主に消費税の研究をしてまして、消費税は直接税であって人件費課税だから、みんなの給料を上げるために、また就職の状況をもっとよくするために廃止すべきだ、というようなことをやっています。おかげでデータ処理にC言語よりもPythonを使うことが多くなってます(^^;;

  • @nisshan2117
    @nisshan2117 5 ปีที่แล้ว +2

    だからscanfで&を使うんですね

    • @kanoinfonet
      @kanoinfonet  5 ปีที่แล้ว

      そうなんです! 入門では説明されませんけどね(^^;;

  • @Fujimon
    @Fujimon 2 ปีที่แล้ว

    こいつは(解析に)使えそうだぁ...

  • @TheUmamoe
    @TheUmamoe 9 ปีที่แล้ว +2

    今ポインタを勉強してるんですが、ポインタのポインタ変数はポインタ変数にしか使えないって覚え方でいいですか?

    • @kanoinfonet
      @kanoinfonet  9 ปีที่แล้ว +7

      +TheUmamoe 基本的には、型が違うと使えません。例えば「intへのポインタ」型と、「intへのポインタへのポインタ」型は違う型です。
      int i;
      int *p;
      int **q;
      とすると、p = &i は両辺とも「intへのポインタ」型なので正しい代入です。q = &p は両辺とも「intへのポインタへのポインタ」型なのでこれも正しいです。
      でも、q = &i とか q = p とかは、左辺が「intへのポインタへのポインタ」型、右辺が「intへのポインタ」型なので、正しくない代入です。
      こんな感じで分かりますか…?

    • @TheUmamoe
      @TheUmamoe 9 ปีที่แล้ว +2

      +和情報網 何となくですが、わかった気がします。
      もうちょっといろいろ書いて、エラー出しながら覚えていきたいと思います。
      ありがとうございました。

  • @れふ-p7r
    @れふ-p7r 3 ปีที่แล้ว

    4:56
    このシーンの5行目の*pの*は間接演算子ではなく、8行目のtmpに代入している*pの*は間接演算子ということであっているでしょうか?

    • @kanoinfonet
      @kanoinfonet  3 ปีที่แล้ว

      鋭い質問ですね。つまり、
      int *p;(変数宣言)
      の*と、
      tmp = *p;(代入式の右辺)
      の*は、同じなのか違うのか、違うとすればどう違うのか、ということですね。
      まず、どちらの*も間接演算子です。その点では同じです。
      ただ、意味は違います。代入式のほうの間接演算では、動画で説明している通り、*pとすることでpの指す先の領域(pに入っているアドレスにある領域)を表して、それが代入式の右辺にあるので、そこの値が取り出されて、左辺に書かれた変数tmpに代入されます。
      変数宣言int *p;は、そう書けばpがintへのポインタ型の変数になる、ということを意味していて、この時点ではpにどんな値(アドレス)が入っているかは関係ありません。この宣言自体が実行されてそのアドレスの先にアクセスする、なんてこともないわけです。
      これはちょっと理解しにくいので、私は次のように考えることにしています。
      int *p; という宣言は、これ以降「*p」と書いたらint型だ、ということを表している。
      *pがint型なら、pは「intへのポインタ」型ですよね。だからこの宣言は、pを「intへのポインタ」型の変数として宣言している、と。こう考えれば、2つの*がどちらも同じ間接演算子だとわかりやすいのではないでしょうか。

  • @ayumunagae8567
    @ayumunagae8567 2 ปีที่แล้ว

    わかりやすいです。何者ですか?

  • @clover331
    @clover331 2 ปีที่แล้ว

    動画を参考にswapライブラリ作ってみた
    /* swap.h */
    /* tmp変数定義 */
    int tmp;
    /* replace */
    void replace(int *p, int *q) {
    int tmp;
    tmp = *p;
    *p = *q;
    *q = tmp;
    }
    /* biggerswap */
    void biggerswap(int *p, int *q) {
    if(*p < *q) {
    tmp = *p;
    *p = *q;
    *q = tmp;
    }
    }
    /* smallerswap */
    void smallerswap(int *p, int *q) {
    if(*p > *q) {
    tmp = *p;
    *p = *q;
    *q = tmp;
    }
    }

    • @clover331
      @clover331 2 ปีที่แล้ว

      replaceの説明
      xとyを交換します
      biggerswapの説明
      xとyを大きい順で交換します
      smallerswapの説明
      xとyを小さい順で交換します