ขนาดวิดีโอ: 1280 X 720853 X 480640 X 360
แสดงแผงควบคุมโปรแกรมเล่น
เล่นอัตโนมัติ
เล่นใหม่
銭湯のロッカーと鍵みたいなもんだと理解してる、ポインタは番号の書かれた鍵でロッカーの中身が取り出せる二重ポインタはロッカーの中に別のロッカーの鍵が入っているイメージ
ポインタ、要するに「変数そのものを指す。中身はその変数のアドレス」ってだけなんだけど、理解するまで苦労したわ何に使うのかサンプルコードからはまったく分からなくて、データ構造とか学びだすとめっちゃ便利!ってなって感動した記憶がある
80年代にアセンブラから入ったんでC言語はまったく難しくなかったですね~
ポインタがわからない人ってそもそも変数を何と思ってるのか謎
むしろC言語から他の言語に行くとポインターが無かったり関数の引数が値渡しなのか参照渡しなのか分からなくて混乱しました。。。
数値と文字型が値渡しで配列やオブジェクトや関数は参照渡しという言語がほとんどかな。
Python始まりだったから、b[]=a[]のコード書こうとすると挫折しちゃいまして
@@resistan-y1hそれ何言語ですか?そんな言語見た事ないっす
めちゃわかりやすいです。天才
そもそもポインタがどのようなものか知りませんでしたが、とても分かりやすかったです。
ポインタがわかりにくいのではなく、ポインタの書式がわかりにくい、というのもよく言われる話ですね。『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型)』になるのもわかりにくさに拍車をかけているところ。
Go言語のポインタはそこら辺改善した文法にしたようですね。
C言語の関数仕様は「参照渡し」ではありません。原則すべて値渡しです。ポインタを使った場合、あたかも参照渡しのように見えますが、実際には仮引数と実引数は値渡しでポインタ変数が渡されています。なのでポインタを引数に渡す場合、なんちゃって参照渡しとでもよぶべきか・・・?
エクセルすごいいい例えやなセルをメモリに見立てるってことやんな
ポインタは変数のアドレスを値としてもつって理解したら簡単になった。
「ぐへへ、実は裏ルートがあるんだぜ。こうするんだよぉ!」って妄想しながら書いてたそしてC言語のポインタと構造体のせいでjavaのインスタンスと参照が理解できず泣いてた
この辺は行列の内積とかを自分で実装するとメッチャ理解度上がる。速度比較するとさらに有り難みも分かる。
C言語は高級アセンブラなのに、変に抽象化して教えるから理解出来無い人が出てくる説。エクセルの説明では、一つのデータが複数記憶されていることになるので、将来に禍根を残しそうな。
C++やってるSNCTのkosen23sですがCでもC++とポインタの感覚は全く変わらないと思いつつC++はCと互換性あるからそりゃそうかって思いながら自分の中で改めてポインタを理解し直しました
C言語は難しいプログラミング言語としてよく上げられていますが、C言語自体が難しいのではなく、特有の機能や概念をどのように活用してコーディングするのが難しいと私は思います。
ちょっと詳しい人だとポインタを配列として書いたり、配列をポインタとして書く人が居たりするけどあれって最適化で逆に遅くなる事があるんだよなぁ。
Excelの例えは値渡しですね
インスタンスをそのまんま渡してるって認識で良いのかな?
Excelを使う説明、興味深く拝見させていただきました。カンが良い初学者はこの説明が理解の助けになるかもしれないですね。ただ、よろしくない方は「セル参照して値を得る」を「セルの値を得る」と解釈して理解が進まないかも、です。※Excelでの話であれば彼ら的には「セルの値を得る方法」でしかなくなり参照やポインタの考え方に結びつかなくなるのです…
是非続きを!!
サムネ見た瞬間にその手もあったか!ってなった
値渡しもエクセルで説明してくれないとわからないです。
値渡しはエクセルで言いますと、「ある1セル内に格納されているデータのみを渡す事」に近いと考えます。1セルには書式や数値、テキストを格納できますね。その「格納した書式、数値、テキストのみを渡すのが値渡し」になります。ここで渡されるのはあくまでセルの中のデータのみなので、受け取った後の独立したデータに編集を加えても渡した側には影響がないことになります。これが参照渡しとの違いかと考えます。長文大変失礼しました。
いまだにC言語のポインタってつかわれてるんだ
逆に使わない方法があるのか…
アセンブラで書いたことがない人にCで書かせようってのが無理ゲーなんだが...メモリにはアドレスがついてるってとこだけ理解させようってんなら、エクセルで説明するのも悪くない。エクセルのアドレスって、セルの内容として入れられるんだっけ?ポインタをエクセルで説明するなら、それが必要そうだけど。
自分はマイコンのアセンブラの知識で入ったらポインタに型があるってなんやねんってなったwインクリメントしたら型のサイズ分いっきに増加するのも知らなかったし。まあ、でもいきなりCよりは理解できたw
「ポインタ」と呼ぶのが失敗してると思っています。「アドレス」と呼べばトラブルは少ないと思うのですけど、不都合は無いのかな?エンディアンとかアライメントとかがアドレッシングと密接な関係にあるので、そこを「ポインタで」と言われると混乱する気がします。Pythonを書いてみたらポインタ的な考えが無いので凄く気持ちが悪いですね。「今、この変数は、何処に居るの?」と云う不安。組み込みでは物理アドレスへの変数の配置を気にしながらソースを書いたりしますが、例えばメモリ使用量削減とか高速化でポインタとか更にポインタのポインタが使えてintとcharをチャンポンしたりとかもできたりしますので、かなりメリットは大きいですね。C#でもポインタが無くなったと聞いてコードを組んでみたら、「ポインタという用語が無くなった」だけでbyRefだっけ?何だっけ、、、無茶苦茶使い難くなっててウンザリしました。結局はPythonで完成したコードも例外除去が出来そうに無かったので、Cで書き直してチャンチャン。ポインタさまさまですね。
なんかJavaみたい、でもなんか書き方が堅っ苦しいな例えるなら、分かったって言えば良いのに承知しましたって言ってるみたい
C言語とアセンブラ言語って似ているから私的にはJava より簡単に感じます。私の専門cobol ですがw
c言語使ったことあるけど全然文法やらシステムから違うから全然難しいぞ(Javaとの比較は触ったことないのでできないが)
大体ポインタ辺りの学習で挫折する人が多い
アセンブラを軽く学んだ方がいいよなー
@@resistan-y1h基本情報で十分では?
普通に、コンピュータの仕組みのお勉強をしたらいいように思うけどね。
C言語は物理メモリのアドレスを直接扱う為の言語、という基本前提も同時に学ばないと理解が進まない。物理メモリやペリフェラルなどを直接扱わないソフトウェアならC言語を使用すべきではない。
C言語のポインタは難しいと認めたほうが、逆に早く習得できる気がします。
Cの文法、特にアスタリスク記号に複数役割を持たせているのが沢山の初学者が苦労する原因だと思う
あ、これは自分もそう思う。なんでC言語の解説書ってあんなに判りにくいんだろ?って思ったよ。かなり昔にC言語を独学で勉強してたけど、確かにポインタのところで悩んだ記憶がある。確か記憶領域内のアドレスだっけか?の場所で変数を取得するんだっけ?忘れたなw
C++の犬はワンと鳴いて猫はニャーと鳴くとかいうクラスの説明はガチで意味わからんかったからそれよりはましだが難しくはあるよな。オブジェクト指向は構造体の延長で教えた方が理解できる。同じようにポインタはアセンブラから学んだ方がいいかな。
銭湯のロッカーと鍵みたいなもんだと理解してる、ポインタは番号の書かれた鍵でロッカーの中身が取り出せる
二重ポインタはロッカーの中に別のロッカーの鍵が入っているイメージ
ポインタ、要するに「変数そのものを指す。中身はその変数のアドレス」ってだけなんだけど、理解するまで苦労したわ
何に使うのかサンプルコードからはまったく分からなくて、データ構造とか学びだすとめっちゃ便利!ってなって感動した記憶がある
80年代にアセンブラから入ったんでC言語はまったく難しくなかったですね~
ポインタがわからない人ってそもそも変数を何と思ってるのか謎
むしろC言語から他の言語に行くとポインターが無かったり関数の引数が値渡しなのか参照渡しなのか分からなくて混乱しました。。。
数値と文字型が値渡しで
配列やオブジェクトや関数は参照渡し
という言語がほとんどかな。
Python始まりだったから、b[]=a[]のコード書こうとすると挫折しちゃいまして
@@resistan-y1hそれ何言語ですか?そんな言語見た事ないっす
めちゃわかりやすいです。天才
そもそもポインタがどのようなものか知りませんでしたが、とても分かりやすかったです。
ポインタがわかりにくいのではなく、ポインタの書式がわかりにくい、というのもよく言われる話ですね。
『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型)』になるのもわかりにくさに拍車をかけているところ。
Go言語のポインタはそこら辺改善した文法にしたようですね。
C言語の関数仕様は「参照渡し」ではありません。原則すべて値渡しです。ポインタを使った場合、あたかも参照渡しのように見えますが、実際には仮引数と実引数は値渡しでポインタ変数が渡されています。なのでポインタを引数に渡す場合、なんちゃって参照渡しとでもよぶべきか・・・?
エクセルすごいいい例えやな
セルをメモリに見立てるってことやんな
ポインタは変数のアドレスを値としてもつって理解したら簡単になった。
「ぐへへ、実は裏ルートがあるんだぜ。こうするんだよぉ!」って妄想しながら書いてた
そしてC言語のポインタと構造体のせいでjavaのインスタンスと参照が理解できず泣いてた
この辺は行列の内積とかを自分で実装するとメッチャ理解度上がる。
速度比較するとさらに有り難みも分かる。
C言語は高級アセンブラなのに、変に抽象化して教えるから理解出来無い人が出てくる説。
エクセルの説明では、一つのデータが複数記憶されていることになるので、将来に禍根を残しそうな。
C++やってるSNCTのkosen23sですがCでもC++とポインタの感覚は全く変わらないと思いつつC++はCと互換性あるからそりゃそうかって思いながら自分の中で改めてポインタを理解し直しました
C言語は難しいプログラミング言語としてよく上げられていますが、C言語自体が難しいのではなく、特有の機能や概念をどのように活用してコーディングするのが難しいと私は思います。
ちょっと詳しい人だと
ポインタを配列として書いたり、配列をポインタとして書く人が居たりするけど
あれって最適化で逆に遅くなる事があるんだよなぁ。
Excelの例えは値渡しですね
インスタンスをそのまんま渡してるって認識で良いのかな?
Excelを使う説明、興味深く拝見させていただきました。
カンが良い初学者はこの説明が理解の助けになるかもしれないですね。
ただ、よろしくない方は「セル参照して値を得る」を「セルの値を得る」と解釈して理解が進まないかも、です。
※Excelでの話であれば彼ら的には「セルの値を得る方法」でしかなくなり参照やポインタの考え方に結びつかなくなるのです…
是非続きを!!
サムネ見た瞬間にその手もあったか!ってなった
値渡しもエクセルで説明してくれないとわからないです。
値渡しはエクセルで言いますと、「ある1セル内に格納されているデータのみを渡す事」に近いと考えます。
1セルには書式や数値、テキストを格納できますね。その「格納した書式、数値、テキストのみを渡すのが値渡し」になります。
ここで渡されるのはあくまでセルの中のデータのみなので、受け取った後の独立したデータに編集を加えても渡した側には影響がないことになります。これが参照渡しとの違いかと考えます。
長文大変失礼しました。
いまだにC言語のポインタってつかわれてるんだ
逆に使わない方法があるのか…
アセンブラで書いたことがない人にCで書かせようってのが無理ゲーなんだが...
メモリにはアドレスがついてるってとこだけ理解させようってんなら、
エクセルで説明するのも悪くない。
エクセルのアドレスって、セルの内容として入れられるんだっけ?
ポインタをエクセルで説明するなら、それが必要そうだけど。
自分はマイコンのアセンブラの知識で入ったら
ポインタに型があるってなんやねんってなったw
インクリメントしたら型のサイズ分いっきに増加するのも知らなかったし。
まあ、でもいきなりCよりは理解できたw
「ポインタ」と呼ぶのが失敗してると思っています。「アドレス」と呼べばトラブルは少ないと思うのですけど、不都合は無いのかな?
エンディアンとかアライメントとかがアドレッシングと密接な関係にあるので、そこを「ポインタで」と言われると混乱する気がします。
Pythonを書いてみたらポインタ的な考えが無いので凄く気持ちが悪いですね。「今、この変数は、何処に居るの?」と云う不安。
組み込みでは物理アドレスへの変数の配置を気にしながらソースを書いたりしますが、例えばメモリ使用量削減とか高速化でポインタとか更にポインタのポインタが使えてintとcharを
チャンポンしたりとかもできたりしますので、かなりメリットは大きいですね。
C#でもポインタが無くなったと聞いてコードを組んでみたら、「ポインタという用語が無くなった」だけでbyRefだっけ?何だっけ、、、無茶苦茶使い難くなっててウンザリしました。
結局はPythonで完成したコードも例外除去が出来そうに無かったので、Cで書き直してチャンチャン。
ポインタさまさまですね。
なんかJavaみたい、でもなんか書き方が堅っ苦しいな
例えるなら、分かったって言えば良いのに承知しましたって言ってるみたい
C言語とアセンブラ言語って似ているから私的にはJava より簡単に感じます。私の専門cobol ですがw
c言語使ったことあるけど全然文法やらシステムから違うから全然難しいぞ(Javaとの比較は触ったことないのでできないが)
大体ポインタ辺りの学習で挫折する人が多い
アセンブラを軽く学んだ方がいいよなー
@@resistan-y1h基本情報で十分では?
普通に、コンピュータの仕組みのお勉強をしたらいいように思うけどね。
C言語は物理メモリのアドレスを直接扱う為の言語、という基本前提も同時に学ばないと理解が進まない。
物理メモリやペリフェラルなどを直接扱わないソフトウェアならC言語を使用すべきではない。
C言語のポインタは難しいと認めたほうが、逆に早く習得できる気がします。
Cの文法、特にアスタリスク記号に複数役割を持たせているのが沢山の初学者が苦労する原因だと思う
あ、これは自分もそう思う。なんでC言語の解説書ってあんなに判りにくいんだろ?って思ったよ。
かなり昔にC言語を独学で勉強してたけど、確かにポインタのところで悩んだ記憶がある。
確か記憶領域内のアドレスだっけか?の場所で変数を取得するんだっけ?忘れたなw
C++の犬はワンと鳴いて
猫はニャーと鳴くとかいう
クラスの説明はガチで意味わからんかったからそれよりはましだが難しくはあるよな。
オブジェクト指向は構造体の延長で教えた方が理解できる。
同じように
ポインタはアセンブラから学んだ方がいいかな。