- ベストアンサー
C言語のポインタとスタックポインタ
プログラム始めて1ヶ月の初心者です。 C言語のポインタとスタックポインタというのは同じなのでしょうか。 スタックポインタの考えは大体理解出来たのですが C言語のポインタとなるとコードを見てもサッパリ分かりません。 ネットで調べても出てこなかったのでどなたか教えて下さい。 よろしくお願いします。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
★紹介 ・スタック・ポインタを理解するにはスタックの動きをお勉強して下さい。 下にアセンブラ入門のサイトを紹介します。 C言語のポインタを学習するのに一番の近道はメモリ・イメージを 紙などに描きアドレスを考えることです。 また、アセンブラをちょっとお勉強すればポインタの理解も早いかもしれない。 ・ちなみにポインタを簡単に説明するとデータ型とアドレスの2つの情報を持つもの。 例えばアセンブラでアドレスが0x1000のとき アドレスに+1すると0x1001になります。 ポインタに+1するとデータ型によって加算される値が変わります。 つまり char *pc→char型は1バイトなので0x1001となる long *pl→long型は4バイトなので0x1004となる double *pd→double型は8バイトなので0x1008となる このようにポインタはデータ型により+1した時にアドレスに加算される値が異なります。 ※通常はポインタのアドレス値を考えなくて良い。アセンブラではないので。 参考サイト: http://www5c.biglobe.ne.jp/~ecb/assembler/assembler00.html http://www5c.biglobe.ne.jp/~ecb/assembler/4_7.html http://www5c.biglobe.ne.jp/~ecb/assembler/4_8.html
その他の回答 (5)
- titokani
- ベストアンサー率19% (341/1726)
>C言語のポインタとスタックポインタというのは同じなのでしょうか。 違うものです。 >スタックポインタの考えは大体理解出来たのですが >C言語のポインタとなるとコードを見てもサッパリ分かりません。 違うものなので、サッパリ分からなくても当然です。 >ネットで調べても出てこなかったのでどなたか教えて下さい。 普通は比較する対象ではないので、ネットで調べても出てこないでしょうね。 でも、「メモリのどこかを指す」という点はいっしょなので、スタックポインタが本当に理解できているのなら、ポインタの理解もたやすいと思いますよ。
お礼
そうなんですか。ありがとうございました。 引き続きポインタの勉強に励むことにします。
- Oh-Orange
- ベストアンサー率63% (854/1345)
★補足要求します。 スタックポインタとは 1...C言語でスタック・データ構造を組んでPush、Popのポインタを意味するのか? 2...CPUプロセッサのレジスタの1つにあるスタック・ポインタ(sp)を意味するのか? どちらですか? ここがハッキリしないと誰も適切な回答が出来ません。 ソースなども含めて補足して下さい。
補足
言葉足らずですみませんでした。 私が言おうとしていたのは >2...CPUプロセッサのレジスタの1つにあるスタック・ポインタ(sp)を意味するのか? のことです。
- neKo_deux
- ベストアンサー率44% (5541/12319)
> スタックポインタの考えは大体理解出来たのですが プロセッサのレジスタの一つですね。 > C言語のポインタ C言語の中のポインタ型の変数です。 土俵が違うし、そのポインタと言う言葉自体、直接的には別のものを指します。 辿り辿って行けば同じものである場合もありますが、質問文の書き方では別物です。
お礼
普通はそんなに辿るものではないですよね。 ありがとうございました。
- gatyan
- ベストアンサー率41% (160/385)
別物です、たぶん スタックというデータ構造がありますが、その説明の部分で出てきていて、データの読み書きにstack[sp]の様に配列を使うなら、スタックポインタとは呼ばれますが int や long など整数型の変数になります ポインタの練習を兼ねているような場合は、ややこしいですが…C言語のポインタということになります *spでスタック上のデータにアクセスしてsp++やsp--でPush/Popを実現しているとか 関数の呼び出しや、変数がどのように管理されるかのような部分で出てきたのなら、CPUのデータ管理の仕組み・スタックを管理するためのもの(レジスタ)を意味します
お礼
どう違うのかが分かりました。詳しく説明して頂きありがとうございました。
- auty
- ベストアンサー率58% (284/486)
・ 「ポイント」と言うのは、「指す」ということです。 ・ C言語の「ポインタ」と言うのは、普通、[メモリのアドレス]を指します。 ・ 「スタックポインタ」と言うのは、スタックの特定位置を「指す物」ということですね。 ・ C言語の「ポインタ」は、「物理」なメモリを意識する必要があります。 アセンブリ言語やマシン語の知識も必要となってきます。 「メモリ」に対する考え方を経験する必要がありそうです。
お礼
>C言語の「ポインタ」は、「物理」なメモリを意識する必要があります。 アセンブリ言語やマシン語の知識も必要となってきます。 「メモリ」に対する考え方を経験する必要がありそうです。 メモリに対する考え方ですね! 一直線にポインタを勉強するより遠回りしてメモリの考え方から勉強した方が 知識が深まりそうですね。 非常に参考になりました。ありがとうございました。
お礼
ありがとうございます。 とても分かりやすかったです。参考サイトよく見てみます。