アカウント名:
パスワード:
自分も機械語から始めたんで、壁と言われてるCのポインタもアッサリ通過だったから、後を考えるとコレが良さそう。
壁と言われてるCのポインタもアッサリ通過だったから
プログラムとメモリの関係(というより「コンピュータの動作原理」を理解するにはアセンブラは有用でしょうね。私もCの前はアセンブラ(Z80)だったのでポインタは「HLと(HL)の違い」という理解でアッサリ通過でした。
初心者にも分かるとか前置きの付いた本でC言語を学習しようとしたらポインタをまったく理解できませんでした。その後本をプログラミング言語Cに変えたらすんなり理解できたので、クソ本を掴まないのも重要かなと
1足しただけで2や4増える理不尽な挙動に困惑しましたが
> 壁と言われてるCのポインタもアッサリ通過
私も今振り返ると、あっさり通過してしまったのですが、当時は概念的にあっさり理解をしてしまっていたので、なぜポインタが壁なのかが理解できなく、もしかしたら、他に自分では気づいていない壁があるのではないかと、存在しない壁を探し回って逆に苦労しましたよ。。。
私も機械語から入ったので、ポインタの何処が難しいのかまるで分からなかったですよ^^
Cで難しいのは、ポインタの概念というより表記法でしょう。pが指す先を*pで表記するのはわかる。でもポインタを宣言する時はchar *pとするわけで、「これはpが指す先を宣言するわけだから…」と考えてわけがわからなくなった記憶があります。
非常に共感します.初めは74LSロジック回路,つぎにPIC16F877でアセンブラ,さいごにCでしたから.
ちなみにPICにはポインタがハードウェアで実装されているので,アセンブラでも間接アドレス指定できます.
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
コンピュータは旧約聖書の神に似ている、規則は多く、慈悲は無い -- Joseph Campbell
基本から教えるべきでしょう (スコア:3, すばらしい洞察)
何事も基礎が大事です。
最初は、こんなの [otonanokagaku.net]を与え、概念を「体験」させます。
つぎに、本番 [otonanokagaku.net]と田宮のリモコンロボット製作セットを渡します。
(インタフェース部分は大人が作ってあげないと無理なので、そこは各自で工夫を)
目の前で「プログラムの通りに実物が動く」ので興味が長続きすると思うのです。
notice : I ignore an anonymous contribution.
Re:基本から教えるべきでしょう (スコア:1)
自分も機械語から始めたんで、壁と言われてるCのポインタもアッサリ通過だったから、後を考えるとコレが良さそう。
the.ACount
Re:基本から教えるべきでしょう (スコア:2)
プログラムとメモリの関係(というより「コンピュータの動作原理」を理解するにはアセンブラは有用でしょうね。
私もCの前はアセンブラ(Z80)だったのでポインタは「HLと(HL)の違い」という理解でアッサリ通過でした。
Re: (スコア:0)
初心者にも分かるとか前置きの付いた本でC言語を学習しようとしたらポインタをまったく理解できませんでした。
その後本をプログラミング言語Cに変えたらすんなり理解できたので、クソ本を掴まないのも重要かなと
Re: (スコア:0)
LDA #$4000
LDA $4000
のみたいな違いで色んなバグを作ったことがあったなw 殆どは#の入れ忘れだけどw
ちなみに前者がZ80で言うHLで、後者が(HL)
Re: (スコア:0)
1足しただけで2や4増える理不尽な挙動に困惑しましたが
Re:基本から教えるべきでしょう (スコア:2)
> 壁と言われてるCのポインタもアッサリ通過
私も今振り返ると、あっさり通過してしまったのですが、
当時は概念的にあっさり理解をしてしまっていたので、
なぜポインタが壁なのかが理解できなく、
もしかしたら、他に自分では気づいていない壁があるのではないかと、
存在しない壁を探し回って逆に苦労しましたよ。。。
Re:基本から教えるべきでしょう (スコア:2)
私も機械語から入ったので、ポインタの何処が難しいのかまるで分からなかったですよ^^
Re: (スコア:0)
Cで難しいのは、ポインタの概念というより表記法でしょう。
pが指す先を*pで表記するのはわかる。でもポインタを宣言する時は
char *p
とするわけで、「これはpが指す先を宣言するわけだから…」と考えて
わけがわからなくなった記憶があります。
Re: (スコア:0)
>とするわけで、「これはpが指す先を宣言するわけだから…」
「pが指す先」なんて、どこにも宣言していません。まずはそこからか!
a*bと*pの*が同じじゃないことを理解できる?、
じゃあ、char*pと*pと(char*)pの*は区別できる?
区別できれば、意味が違うことも理解できるでしょ?
もしかして、/*p*/の*も区別できないのか :-p
Re: (スコア:0)
Re: (スコア:0)
char *p;
でポインタが指す先の領域も確保されると思っている人が多いのですが、
(驚くべきことに、90年代にはそう断言している本すらありました)
その半数ぐらいがこの文法の勘違いに起因しています。良く考えると
なぜこういう体系になっているのか分かるのですがね。
>a*bと*pの*が同じじゃないことを理解できる?
私はこれが理解できませんでしたね。いや、理解はしていましたが
「人間がそう区別してコードを書いても、機械がどうやってそれを判別するんだ?」
という感じで。その後、レキシカルアナライザーやらの存在を習って、ああ
そういうことなのかと感心しました。
char *p;の勘違いをしている人の一部は、やはりそういう疑問を持っていましたね。
Re:基本から教えるべきでしょう (スコア:1)
私も機械語→アセンブラ→Cという流れでしたので「他の人がポインタを理解できない事」が理解できていません。
なので、他人に説明するとき、非常に苦労します。
(CPUとメモリの説明を行う、ハードウェアべったりの説明しか出来ていません……)
notice : I ignore an anonymous contribution.
Re:基本から教えるべきでしょう (スコア:1)
非常に共感します.
初めは74LSロジック回路,つぎにPIC16F877でアセンブラ,さいごにCでしたから.
ちなみにPICにはポインタがハードウェアで実装されているので,アセンブラでも間接アドレス指定できます.
新人。プログラマレベルをポケモンで言うと、コラッタぐらい