ขนาดวิดีโอ: 1280 X 720853 X 480640 X 360
แสดงแผงควบคุมโปรแกรมเล่น
เล่นอัตโนมัติ
เล่นใหม่
これはすごく分かりやすいなぜ、ポインタを使わなければいけないのかが理解できる
お役に立てれば幸いです(^v^)
2022年に見てるけど、youtubeで1番わかりやすいポインタ説明動画だと思う
まだC言語を学び始めたばかりなのですが、革命的に分かりやすいです。ありがとうございます。
革命的ですか😅 お役に立てればうれしいです。
こんな分かりやすい講義初めてw
お役に立てたならうれしいです(^^)/
この動画で理解して、わすれて、また見にくるこれを何回も繰り返せばポインタなんか怖くない!!
何度でも見て下さい(^v^)
ここ数日、理解できずに苦しんでいたポインターについて理解できました!!!同僚にも紹介します
ありがとうございます。どんどんお知り合いにお知らせください(^^)/
Golangを勉強しているものです。3年前の動画ではありますが、ポインタについて全く理解できる色々サイトを当たっていたのですが、この方の動画をみて腑に落ちました。ありがとうございます!
ご視聴ありがとうございます。お役に立てたならうれしいです(^v^)
見れば見るほどポインタがわからなくなったけど、これで理解できた
あぁ、すごくわかりやすい…😭分かるのがとても楽しい…ほんとにありがとうございます🤩
わかるのが楽しいとは素晴らしいですね! お役に立ててうれしいです(^v^)
先達が「Cはポインタで心が折れそうになる」と言っていた通り、私も学び始めてポインタで躓いていました。この動画のおかげで基礎がつかめた、気がします。ありがとうございます。書籍も購入してみようと思います。
お役に立ててうれしいです。ポインタは確かに難しいところなので、私もできるだけわかりやすく丁寧に説明するように心がけています。書籍の方も役立てていただけると、頑張って書いた甲斐があります。ありがとうございます (^v^)
とても分かり易です。
大学1回生です。独学で勉強しています。書籍では分かりにくかったのでとても助かりました
お役に立てたなら幸いです😊
すごく分かりやすい!感謝しかない…
分かりやすすぎる。。。ありがとうございます!
お役に立てたならうれしいです(^v^)
すごい!有難うございます!!!
Taki is my nickname お役に立てたならうれしいです (^v^)
和情報網 ぜひ続編を作って欲しいです。。
Taki is my nickname テキストのどのあたりが分かりにくいとか教えてもらえると次に作る動画の参考になります。短い動画でも、1本作るとなると結構労力がかかるので、なかなか個別のご期待には添えないのが心苦しいのですが…ご希望は出してもらえればといつも思っています。
和情報網 いえいえ、勝手を言ってしまいました。動画の完成度が非常に高いですものね。無料配信するのは、大変です。
Taki is my nickname ご意見はいつでも歓迎ですので、こんなのあったらなぁという話は是非お願いします (^v^)
今年からエンジニアになりました。研修でC学んでます。煮詰まったときはいつも参考にさせていただいております。会社の講師より分かりやすくて助かります笑
お役に立てればうれしいです(^v^)
電子テキスト購入させてもらいました。簡潔にまとめられててほんとにわかりやすいです! ありがとうございます!
お役に立てたならとてもうれしいです。十分にご活用いただければと思います(^v^)
@@kanoinfonet テキストの演習問題の解答サンプルコードなどはどこかにありますでしょうか? 所々気になるものがあるんですが。
@@KK-en1vx 学校の授業などで受講者にやってもらう演習として使えるようにするために、あいにく解答例はご用意してないんですよね……ご不便をおかけしてすみません。これ、教科書を出版するときにいつも悩ましいところなのです。ご理解いただけると幸いです(_ _)
@@kanoinfonet なるほど。たしかに解答載せちゃうと、授業で提出課題として課せなくなってしまいますね。返信ありがとうございます。頑張ります!
@@KK-en1vx いつもこの件は心苦しいのです……応援してますので頑張って下さい。
入れ替えと言えばa = a xor bb = a xor ba = a xor bでやると一時変数不要だった。(同様に引き算だけでもできるがマイナス値で問題あったかな)
授業よりわかりやすいです!
あら、そうですか。助けになったならうれしいです😊
わかりやすかったです
それはよかったです(^v^)
すごく分かりやすい!
ならばよかったです(^v^)
2:465:18自分用に書いときます
矢印と箱による説明では、言い方を工夫しても解らない人には永遠に解らない。初学者にCのポインタを理解させるためには、メモリとそのアドレスを理解させること。遠回りのようでも、一度アセンブラを経験させることだと思うのだけれど。
それは確実なやり方の1つでしょうね。私も長くC言語を教えています(いました)が、アセンブリ言語に踏み込むとその分だけ覚えることが増えるので、学習効果としては長短分かれる、と感じています。どの説明がわかりやすいかは学習者によるため、私の説明の仕方でわかってくれる人がいればそれでいいですし、もしわかりにくければ、いくらでも他の本や動画がありますので、いいかなぁと……ちなみに私は今のところ、アセンブリまでは説明しないけどメモリとデータの格納については説明する、くらいのところを選択しています。このシリーズで言うとこのあたりです:th-cam.com/video/KgzfjriHNOc/w-d-xo.html
値渡し、参照渡しですね。
はい、そうですね。C言語の引数渡し方式は値渡しのみなので、ポインタ値を渡すことで参照渡しを実現していると言ってよいと思います。
ループのカウンタ変数iやjはよく見かけますが、ポインタ変数では*pや*qを慣例的に使うというのを初めて知りました。
英単語から短い変数名をつけるというのは昔から行われているようです。ポインタpointerならp, qなのと同様に、整数integerはi, j, k(あとはnumberからn, mとか)、配列arrayはa、文字characterはc、文字列stringはs, t……なんてのがC言語ではよく使われるみたいです。
大変よく分かります。図で紹介されているのが、特にわかりやすいです。この続きなどはないのでしょうか?あれば教えてください。是非お願いします。
残念ながらこのシリーズでは続きを作っていません……。大学の授業向けに作った動画があって、そこにポインタの演習の解説があります。本シリーズとは違ってゼロからの説明ではないのですが、参考にはなるかも知れません:bit.ly/ProIImoviesbit.ly/ProImovies
わかりやすい
とてもわかりやすく、いつも見させていただいています。ポインタはグローバル変数と同じ使い方ができるということなのでしょうか?
グローバル変数だとどの関数からでも見えてしまいますが、ポインタを関数から関数へ渡すと、そのお互いだけが変数の領域にアクセスできるので、おかしな事故(どこかで意図せず変数の内容を書き換えてしまったりとか)が起きにくい、わかりやすいというメリットがあります。
@@kanoinfonet なるほど!!ありがとうございます!
めちゃめちゃわかりやすいです!普段投稿者さんは何をなさってるんでしょうか?気になります!
ありがとうございます(^v^)今はなぜか主に消費税の研究をしてまして、消費税は直接税であって人件費課税だから、みんなの給料を上げるために、また就職の状況をもっとよくするために廃止すべきだ、というようなことをやっています。おかげでデータ処理にC言語よりもPythonを使うことが多くなってます(^^;;
だからscanfで&を使うんですね
そうなんです! 入門では説明されませんけどね(^^;;
こいつは(解析に)使えそうだぁ...
今ポインタを勉強してるんですが、ポインタのポインタ変数はポインタ変数にしか使えないって覚え方でいいですか?
+TheUmamoe 基本的には、型が違うと使えません。例えば「intへのポインタ」型と、「intへのポインタへのポインタ」型は違う型です。int i;int *p;int **q;とすると、p = &i は両辺とも「intへのポインタ」型なので正しい代入です。q = &p は両辺とも「intへのポインタへのポインタ」型なのでこれも正しいです。でも、q = &i とか q = p とかは、左辺が「intへのポインタへのポインタ」型、右辺が「intへのポインタ」型なので、正しくない代入です。こんな感じで分かりますか…?
+和情報網 何となくですが、わかった気がします。もうちょっといろいろ書いて、エラー出しながら覚えていきたいと思います。ありがとうございました。
4:56このシーンの5行目の*pの*は間接演算子ではなく、8行目のtmpに代入している*pの*は間接演算子ということであっているでしょうか?
鋭い質問ですね。つまり、 int *p;(変数宣言)の*と、 tmp = *p;(代入式の右辺)の*は、同じなのか違うのか、違うとすればどう違うのか、ということですね。まず、どちらの*も間接演算子です。その点では同じです。ただ、意味は違います。代入式のほうの間接演算では、動画で説明している通り、*pとすることでpの指す先の領域(pに入っているアドレスにある領域)を表して、それが代入式の右辺にあるので、そこの値が取り出されて、左辺に書かれた変数tmpに代入されます。変数宣言int *p;は、そう書けばpがintへのポインタ型の変数になる、ということを意味していて、この時点ではpにどんな値(アドレス)が入っているかは関係ありません。この宣言自体が実行されてそのアドレスの先にアクセスする、なんてこともないわけです。これはちょっと理解しにくいので、私は次のように考えることにしています。 int *p; という宣言は、これ以降「*p」と書いたらint型だ、ということを表している。*pがint型なら、pは「intへのポインタ」型ですよね。だからこの宣言は、pを「intへのポインタ」型の変数として宣言している、と。こう考えれば、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; }}
replaceの説明xとyを交換しますbiggerswapの説明xとyを大きい順で交換しますsmallerswapの説明xとyを小さい順で交換します
これはすごく分かりやすい
なぜ、ポインタを使わなければいけないのかが理解できる
お役に立てれば幸いです(^v^)
2022年に見てるけど、youtubeで1番わかりやすいポインタ説明動画だと思う
まだC言語を学び始めたばかりなのですが、革命的に分かりやすいです。
ありがとうございます。
革命的ですか😅 お役に立てればうれしいです。
こんな分かりやすい講義初めてw
お役に立てたならうれしいです(^^)/
この動画で理解して、わすれて、また見にくる
これを何回も繰り返せばポインタなんか怖くない!!
何度でも見て下さい(^v^)
ここ数日、理解できずに苦しんでいたポインターについて
理解できました!!!
同僚にも紹介します
ありがとうございます。どんどんお知り合いにお知らせください(^^)/
Golangを勉強しているものです。3年前の動画ではありますが、ポインタについて全く理解できる色々サイトを当たっていたのですが、この方の動画をみて腑に落ちました。ありがとうございます!
ご視聴ありがとうございます。お役に立てたならうれしいです(^v^)
見れば見るほどポインタがわからなくなったけど、これで理解できた
あぁ、すごくわかりやすい…😭
分かるのがとても楽しい…
ほんとにありがとうございます🤩
わかるのが楽しいとは素晴らしいですね! お役に立ててうれしいです(^v^)
先達が「Cはポインタで心が折れそうになる」と言っていた通り、私も学び始めてポインタで躓いていました。
この動画のおかげで基礎がつかめた、気がします。ありがとうございます。
書籍も購入してみようと思います。
お役に立ててうれしいです。ポインタは確かに難しいところなので、私もできるだけわかりやすく丁寧に説明するように心がけています。
書籍の方も役立てていただけると、頑張って書いた甲斐があります。ありがとうございます (^v^)
とても分かり易です。
大学1回生です。独学で勉強しています。書籍では分かりにくかったのでとても助かりました
お役に立てたなら幸いです😊
すごく分かりやすい!感謝しかない…
分かりやすすぎる。。。ありがとうございます!
お役に立てたならうれしいです(^v^)
すごい!有難うございます!!!
Taki is my nickname お役に立てたならうれしいです (^v^)
和情報網 ぜひ続編を作って欲しいです。。
Taki is my nickname
テキストのどのあたりが分かりにくいとか教えてもらえると
次に作る動画の参考になります。
短い動画でも、1本作るとなると結構労力がかかるので、
なかなか個別のご期待には添えないのが心苦しいのですが…
ご希望は出してもらえればといつも思っています。
和情報網 いえいえ、勝手を言ってしまいました。動画の完成度が非常に高いですものね。無料配信するのは、大変です。
Taki is my nickname
ご意見はいつでも歓迎ですので、こんなのあったらなぁという話は是非お願いします (^v^)
今年からエンジニアになりました。
研修でC学んでます。
煮詰まったときはいつも参考にさせていただいております。
会社の講師より分かりやすくて助かります笑
お役に立てればうれしいです(^v^)
電子テキスト購入させてもらいました。
簡潔にまとめられててほんとにわかりやすいです! ありがとうございます!
お役に立てたならとてもうれしいです。十分にご活用いただければと思います(^v^)
@@kanoinfonet テキストの演習問題の解答
サンプルコードなどはどこかにありますでしょうか? 所々気になるものがあるんですが。
@@KK-en1vx 学校の授業などで受講者にやってもらう演習として使えるようにするために、あいにく解答例はご用意してないんですよね……ご不便をおかけしてすみません。これ、教科書を出版するときにいつも悩ましいところなのです。ご理解いただけると幸いです(_ _)
@@kanoinfonet なるほど。たしかに解答載せちゃうと、授業で提出課題として課せなくなってしまいますね。
返信ありがとうございます。頑張ります!
@@KK-en1vx いつもこの件は心苦しいのです……応援してますので頑張って下さい。
入れ替えと言えば
a = a xor b
b = a xor b
a = a xor b
でやると一時変数不要だった。(同様に引き算だけでもできるがマイナス値で問題あったかな)
授業よりわかりやすいです!
あら、そうですか。助けになったならうれしいです😊
わかりやすかったです
それはよかったです(^v^)
すごく分かりやすい!
ならばよかったです(^v^)
2:46
5:18自分用に書いときます
矢印と箱による説明では、言い方を工夫しても解らない人には永遠に解らない。
初学者にCのポインタを理解させるためには、メモリとそのアドレスを理解させること。
遠回りのようでも、一度アセンブラを経験させることだと思うのだけれど。
それは確実なやり方の1つでしょうね。
私も長くC言語を教えています(いました)が、アセンブリ言語に踏み込むとその分だけ覚えることが増えるので、学習効果としては長短分かれる、と感じています。どの説明がわかりやすいかは学習者によるため、私の説明の仕方でわかってくれる人がいればそれでいいですし、もしわかりにくければ、いくらでも他の本や動画がありますので、いいかなぁと……
ちなみに私は今のところ、アセンブリまでは説明しないけどメモリとデータの格納については説明する、くらいのところを選択しています。このシリーズで言うとこのあたりです:th-cam.com/video/KgzfjriHNOc/w-d-xo.html
値渡し、参照渡しですね。
はい、そうですね。C言語の引数渡し方式は値渡しのみなので、ポインタ値を渡すことで参照渡しを実現していると言ってよいと思います。
ループのカウンタ変数iやjはよく見かけますが、ポインタ変数では*pや*qを慣例的に使うというのを初めて知りました。
英単語から短い変数名をつけるというのは昔から行われているようです。
ポインタpointerならp, qなのと同様に、
整数integerはi, j, k(あとはnumberからn, mとか)、
配列arrayはa、
文字characterはc、
文字列stringはs, t
……なんてのがC言語ではよく使われるみたいです。
大変よく分かります。図で紹介されているのが、特にわかりやすいです。この続きなどはないのでしょうか?あれば教えてください。是非お願いします。
残念ながらこのシリーズでは続きを作っていません……。大学の授業向けに作った動画があって、そこにポインタの演習の解説があります。本シリーズとは違ってゼロからの説明ではないのですが、参考にはなるかも知れません:
bit.ly/ProIImovies
bit.ly/ProImovies
わかりやすい
お役に立てれば幸いです(^v^)
とてもわかりやすく、いつも見させていただいています。
ポインタはグローバル変数と同じ使い方ができるということなのでしょうか?
グローバル変数だとどの関数からでも見えてしまいますが、ポインタを関数から関数へ渡すと、そのお互いだけが変数の領域にアクセスできるので、おかしな事故(どこかで意図せず変数の内容を書き換えてしまったりとか)が起きにくい、わかりやすいというメリットがあります。
@@kanoinfonet なるほど!!ありがとうございます!
めちゃめちゃわかりやすいです!
普段投稿者さんは何をなさってるんでしょうか?
気になります!
ありがとうございます(^v^)
今はなぜか主に消費税の研究をしてまして、消費税は直接税であって人件費課税だから、みんなの給料を上げるために、また就職の状況をもっとよくするために廃止すべきだ、というようなことをやっています。おかげでデータ処理にC言語よりもPythonを使うことが多くなってます(^^;;
だからscanfで&を使うんですね
そうなんです! 入門では説明されませんけどね(^^;;
こいつは(解析に)使えそうだぁ...
今ポインタを勉強してるんですが、ポインタのポインタ変数はポインタ変数にしか使えないって覚え方でいいですか?
+TheUmamoe 基本的には、型が違うと使えません。例えば「intへのポインタ」型と、「intへのポインタへのポインタ」型は違う型です。
int i;
int *p;
int **q;
とすると、p = &i は両辺とも「intへのポインタ」型なので正しい代入です。q = &p は両辺とも「intへのポインタへのポインタ」型なのでこれも正しいです。
でも、q = &i とか q = p とかは、左辺が「intへのポインタへのポインタ」型、右辺が「intへのポインタ」型なので、正しくない代入です。
こんな感じで分かりますか…?
+和情報網 何となくですが、わかった気がします。
もうちょっといろいろ書いて、エラー出しながら覚えていきたいと思います。
ありがとうございました。
4:56
このシーンの5行目の*pの*は間接演算子ではなく、8行目のtmpに代入している*pの*は間接演算子ということであっているでしょうか?
鋭い質問ですね。つまり、
int *p;(変数宣言)
の*と、
tmp = *p;(代入式の右辺)
の*は、同じなのか違うのか、違うとすればどう違うのか、ということですね。
まず、どちらの*も間接演算子です。その点では同じです。
ただ、意味は違います。代入式のほうの間接演算では、動画で説明している通り、*pとすることでpの指す先の領域(pに入っているアドレスにある領域)を表して、それが代入式の右辺にあるので、そこの値が取り出されて、左辺に書かれた変数tmpに代入されます。
変数宣言int *p;は、そう書けばpがintへのポインタ型の変数になる、ということを意味していて、この時点ではpにどんな値(アドレス)が入っているかは関係ありません。この宣言自体が実行されてそのアドレスの先にアクセスする、なんてこともないわけです。
これはちょっと理解しにくいので、私は次のように考えることにしています。
int *p; という宣言は、これ以降「*p」と書いたらint型だ、ということを表している。
*pがint型なら、pは「intへのポインタ」型ですよね。だからこの宣言は、pを「intへのポインタ」型の変数として宣言している、と。こう考えれば、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;
}
}
replaceの説明
xとyを交換します
biggerswapの説明
xとyを大きい順で交換します
smallerswapの説明
xとyを小さい順で交換します