【掲示板ご利用上の注意】

 ※題名は具体的に!
 ※学校の課題の丸投げ禁止!
 ※ソースの添付は「HTML変換ツール」で字下げ!
 ※返信の引用は最小限に!
 ※環境(OSとコンパイラ)や症状は具体的に詳しく!
 ※返信付き投稿の削除は禁止!
 ※マルチポスト(多重投稿)は慎んで!

 詳しくはこちら


本当はこんなに大きく書きたくはないのですが、なかなか守っていただけなくて…。
 守ってくださいね。お願いします。(by管理人)

C言語ソース⇒HTML形式ツール掲示板2こちら


管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧

No.22032

ポインタのポインタ
投稿者---青島(2005/07/21 23:44:54)


ポインタのポインタがあるみたいですが、
実際データはどのようなものが入って
いるのでしょうか。

ポインタは、アドレス格納変数。
ポインタのポインタは???
というような感じです。

サイトで調べていても解らなくて投稿
させて頂きました。

http://www9.plala.or.jp/sgwr-t/c/sec11-2.html
(2)アドレス渡し
は何となく解るような気がします。

また、引数にポインタのポインタを指定することも
できるのでしょうか。
(全然イメージできません)

以上、宜しくお願いします。


この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:ポインタのポインタ 22033 まきじ 2005/07/21 23:52:50


No.22033

Re:ポインタのポインタ
投稿者---まきじ(2005/07/21 23:52:50)


>ポインタは、アドレス格納変数。
>ポインタのポインタは???

ある変数のアドレスを格納しているポインタ変数の、
アドレスを格納できます。

>また、引数にポインタのポインタを指定することも
>できるのでしょうか。

できます。
サンプル:

#include <stdio.h>

void func(int **qq){

    printf("%d",**qq);
    
}

int main(void){

    int x;
    int *p;
    int **pp;
    
    x = 100;
    p = &x;
    pp = &p;
    
    func(pp);
    
    return 0;
}



この投稿にコメントする

削除パスワード

No.22034

Re:ポインタのポインタ
投稿者---青島(2005/07/22 09:22:49)


こんにちは。
まきじさん、ありがとうございます。

>ある変数のアドレスを格納しているポインタ変数の、
>アドレスを格納できます。
結局アドレスの格納なんですか。

>>また、引数にポインタのポインタを指定することも
>>できるのでしょうか。
>
>できます。
引数にポインタを指定した場合、文字列渡しというような
ことは解るのですが...。
(正確にはアドレスの数値を渡しているだけだと思います)
引数にポインタのポインタを指定した場合、文字列の先頭
アドレスのアドレスを渡すということになるのでしょうか。
そこから、元となる文字列を参照することはできるのでしょうか。

初心者なもので、解らない事だらけです。

申し訳ございませんが、宜しくお願いします。


この投稿にコメントする

削除パスワード

No.22039

Re:ポインタのポインタ
投稿者---にゃ(2005/07/22 14:50:56)


char str[] = "abcdef";
char *p = &str[0]
char **pp = &p;

とし、

str[]の先頭アドレスが仮に0x00000001だとした場合、
*pの値は0x00000001になります。が、
*p自体もアドレスを保持していますので、
仮に*pのアドレスが0x00000010だとします。

そうすると、**ppの値が0x00000010になります。

なので、
ppを参照すると0x00000010が表示され、
*ppを参照すると*pの値である0x00000001が表示されます。
**ppを参照すると"abcdef"が表示されます。

なんか書いててわけわからんくなってきたから
間違ってるかも。


この投稿にコメントする

削除パスワード

No.22040

Re:ポインタのポインタ
投稿者---・・・(2005/07/22 15:42:00)



>結局アドレスの格納なんですか。
本当に分かったの?

>そこから、元となる文字列を参照することはできるのでしょうか。
できると思います。

少しは自分でソースコードを書いて、確かめて見てください。

まきじさんのような親切な方が、この後に回答してないのは
何度も聞こうとする君の態度にあきれ返っているか、病気の
ような緊急事態かのどちらかと思います。

ついでに、おっせかにも課題を出してあげるから。
下記についての使い方が分かれば一応合格です。
添削、説明はしません。(他の方の説明は構いません。)

>ポインタのポインタがあるみたいですが、

例えば、標準関数の「strtol」の第二引数はそうです。

long strtol( const char *nptr, char **endptr, int base );
使用例
char *string, *stopstring;

中略
l = strtol( string, &stopstring, 10 );

正確には「MSDN」を参照してください。

何故にこのようなことを書くかというと・・・
某○社のPDAとWinアプリのデータの送受信を
作っていた人間も学校出たてのころは

char *string, **stopstring;
中略
l = strtol( string, stopstring, 10 );

なあーんて危ないコードを書いてので、気をつけて欲しいからです。
この違いが分からないのに、コードを書くと大変です。
#って、そう言う私も最初のころは・・・。

ちなみに「ポインタのポインタのポインタの・・・ポインタ」も
あるみたいです。暇で元気があるなら試すことも良いとは思います。
Win32APIではポインタのポインタはよく使います。




この投稿にコメントする

削除パスワード

No.22041

Re:ポインタのポインタ
投稿者---・・・(2005/07/22 15:54:12)



訂正
>ついでに、おっせかにも課題を出してあげるから。
おせっかいにも
>危ないコードを書いてので、
危ないコードを書いていたので、

#日本語に気をつけなきゃ(>私)



この投稿にコメントする

削除パスワード

No.22044

Re:ポインタのポインタ
投稿者---REE(2005/07/22 16:51:55)


>少しは自分でソースコードを書いて、確かめて見てください。

これには同意ですが、

>まきじさんのような親切な方が、この後に回答してないのは
>何度も聞こうとする君の態度にあきれ返っているか、病気の
>ような緊急事態かのどちらかと思います。

少なくともこの判断がされる程の時間は経っていないかと・・
下記の可能性は無視ですか?

・まだ見ていない。
・見たけど忙しくて回答する時間が無い。



この投稿にコメントする

削除パスワード

No.22045

Re:ポインタのポインタ
投稿者---まきじ(2005/07/22 17:41:57)


>まきじさんのような親切な方が、この後に回答してないのは
>何度も聞こうとする君の態度にあきれ返っているか、

そんな事ありませんよ。
REEさん、仰ってる様にレスできない状況に居ただけです。


この投稿にコメントする

削除パスワード

No.22047

Re:ポインタのポインタ
投稿者---・・・(2005/07/22 19:14:24)



>REEさん、仰ってる様にレスできない状況に居ただけです。
そうだったのですか。その可能性も考えたのですが、まきじさん
にしては日中の「6時間」も空いたので、多少の心配をしました。

(いつでも教えて貰える訳ではない)そのようなこともあるので、
ここのスレ主には、手がかりのヒントを貰ったら、後は自分でも
努力をすべきだという全体の趣旨には、REEさんも賛同してくれると
思います。(笑)



この投稿にコメントする

削除パスワード

No.22046

Re:ポインタのポインタ
投稿者---まきじ(2005/07/22 17:46:25)


>結局アドレスの格納なんですか。

そうですね。
ポインタ変数は、アドレスを格納する為にあると思います。

>(正確にはアドレスの数値を渡しているだけだと思います)

ポインタを引数にすると「参照渡し」と言われていますが、
実際は、単なるアドレスの「値渡し」です。

>引数にポインタのポインタを指定した場合、文字列の先頭
>アドレスのアドレスを渡すということになるのでしょうか。

文字列(char型の配列)でも int型 や double型 などと同じです。


この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧