dポイントプレゼントキャンペーン実施中!

プログラム始めて1ヶ月の初心者です。
C言語のポインタとスタックポインタというのは同じなのでしょうか。
スタックポインタの考えは大体理解出来たのですが
C言語のポインタとなるとコードを見てもサッパリ分かりません。
ネットで調べても出てこなかったのでどなたか教えて下さい。
よろしくお願いします。

A 回答 (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/assemb …
http://www5c.biglobe.ne.jp/~ecb/assembler/4_7.html
http://www5c.biglobe.ne.jp/~ecb/assembler/4_8.html
    • good
    • 0
この回答へのお礼

ありがとうございます。
とても分かりやすかったです。参考サイトよく見てみます。

お礼日時:2008/04/22 22:41

>C言語のポインタとスタックポインタというのは同じなのでしょうか。


違うものです。
>スタックポインタの考えは大体理解出来たのですが
>C言語のポインタとなるとコードを見てもサッパリ分かりません。
違うものなので、サッパリ分からなくても当然です。
>ネットで調べても出てこなかったのでどなたか教えて下さい。
普通は比較する対象ではないので、ネットで調べても出てこないでしょうね。

でも、「メモリのどこかを指す」という点はいっしょなので、スタックポインタが本当に理解できているのなら、ポインタの理解もたやすいと思いますよ。
    • good
    • 0
この回答へのお礼

そうなんですか。ありがとうございました。
引き続きポインタの勉強に励むことにします。

お礼日時:2008/04/15 23:06

★補足要求します。


 スタックポインタとは
 1...C言語でスタック・データ構造を組んでPush、Popのポインタを意味するのか?
 2...CPUプロセッサのレジスタの1つにあるスタック・ポインタ(sp)を意味するのか?
 どちらですか?
 ここがハッキリしないと誰も適切な回答が出来ません。
 ソースなども含めて補足して下さい。

この回答への補足

言葉足らずですみませんでした。
私が言おうとしていたのは
>2...CPUプロセッサのレジスタの1つにあるスタック・ポインタ(sp)を意味するのか?
のことです。

補足日時:2008/04/15 23:07
    • good
    • 0

> スタックポインタの考えは大体理解出来たのですが



プロセッサのレジスタの一つですね。

> C言語のポインタ

C言語の中のポインタ型の変数です。


土俵が違うし、そのポインタと言う言葉自体、直接的には別のものを指します。
辿り辿って行けば同じものである場合もありますが、質問文の書き方では別物です。
    • good
    • 0
この回答へのお礼

普通はそんなに辿るものではないですよね。
ありがとうございました。

お礼日時:2008/04/15 23:11

別物です、たぶん



スタックというデータ構造がありますが、その説明の部分で出てきていて、データの読み書きにstack[sp]の様に配列を使うなら、スタックポインタとは呼ばれますが int や long など整数型の変数になります
ポインタの練習を兼ねているような場合は、ややこしいですが…C言語のポインタということになります
*spでスタック上のデータにアクセスしてsp++やsp--でPush/Popを実現しているとか

関数の呼び出しや、変数がどのように管理されるかのような部分で出てきたのなら、CPUのデータ管理の仕組み・スタックを管理するためのもの(レジスタ)を意味します
    • good
    • 0
この回答へのお礼

どう違うのかが分かりました。詳しく説明して頂きありがとうございました。

お礼日時:2008/04/15 23:14

・ 「ポイント」と言うのは、「指す」ということです。



・ C言語の「ポインタ」と言うのは、普通、[メモリのアドレス]を指します。

・ 「スタックポインタ」と言うのは、スタックの特定位置を「指す物」ということですね。

・ C言語の「ポインタ」は、「物理」なメモリを意識する必要があります。
  アセンブリ言語やマシン語の知識も必要となってきます。
  「メモリ」に対する考え方を経験する必要がありそうです。
    • good
    • 0
この回答へのお礼

>C言語の「ポインタ」は、「物理」なメモリを意識する必要があります。
  アセンブリ言語やマシン語の知識も必要となってきます。
  「メモリ」に対する考え方を経験する必要がありそうです。
メモリに対する考え方ですね!
一直線にポインタを勉強するより遠回りしてメモリの考え方から勉強した方が
知識が深まりそうですね。
非常に参考になりました。ありがとうございました。

お礼日時:2008/04/15 23:19

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!