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

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

 詳しくはこちら


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

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


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

No.22434

ポインタのポインタ
投稿者---C言語(2005/08/05 09:07:14)


ポインタのポインタの使いどころが解りません。
コマンドラインから引数を受けとるときなどに使われているのを見かけますがポインタ配列と違うところはどこなのでしょうか?
**pは*pのアドレスを指すのですよね。
どういうときに便利なのでしょうか?
最近C言語の勉強を始めたばかりでわからないことだらけですが、
詳しい方わかりやすくご説明願えないでしょうか?
よろしくお願いいたします。


この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:ポインタのポインタ 22436 まきじ 2005/08/05 09:34:22
<子記事> Re:ポインタのポインタ 22477 ... 2005/08/05 22:43:16


No.22436

Re:ポインタのポインタ
投稿者---まきじ(2005/08/05 09:34:22)


>ポインタのポインタの使いどころが解りません。
>コマンドラインから引数を受けとるときなどに使われているのを見かけますがポインタ配列と違うところはどこなのでしょうか?

char **p;
char *q[5];

と宣言した場合、
ポインタのポインタは、4 バイト(sizeof(p))確保されるのに
対して、ポインタの配列は、要素 1 つ char* 型で 4 バイトで
それが、5 つあるので 20 バイト確保されます。
(ポインタ変数のサイズは処理系依存です。)


この投稿にコメントする

削除パスワード

No.22477

Re:ポインタのポインタ
投稿者---...(2005/08/05 22:43:16)


>ポインタのポインタの使いどころが解りません。
>コマンドラインから引数を受けとるときなどに使われているのを見かけますがポインタ配列と違うところはどこなのでしょうか?
>**pは*pのアドレスを指すのですよね。
>どういうときに便利なのでしょうか?

使いどころだと、ポインタ配列を引数に渡したい時。
void Hoge(char** ppData )
{
....
}

char* data[5] ;
data[0] = malloc(...) ;
strcpy( data[0] , ... ) ;
data[1] = malloc(...) ;
strcpy( data[1] , ... ) ;
...
data[4] = malloc(...) ;
strcpy( data[4] , ... ) ;
/*この5つの文字列をHogeに渡す時*/
Hoge(&data) ;



この投稿にコメントする

削除パスワード

No.22478

Re:ポインタのポインタ
投稿者---まきじ(2005/08/05 23:19:52)


>void Hoge(char** ppData )

>char* data[5];
>Hoge(&data);

& は要りません。
& アドレス演算子は、ポインタに変換するため
& を付加すると、char *(*)[5] となり型が一致しません。


この投稿にコメントする

削除パスワード

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