掲示板利用宣言

 次のフォームをすべてチェックしてからご利用ください。

 私は

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

掲示板2

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

No.26805

ポインタについて
投稿者---ぴかちゅう(2006/05/09 16:14:38)


どうもわかりません。


char *p[10] = {
文字列がしっかり入っていて
};

char *temp;

temp = p[0];
とあった場合、*tempはポインタであるから、ポインタは何かオブジェクトとのアドレスを入れるもんだから、
たとえば、
char *temp;
とあったらchar型の変数のアドレスを入れるから、
char charcter = '';
みたいなのがあったとして、
temp = &charcter;
とするのはわかるんですけど、
さっきの
char *p[10] = {
文字列が入っている
}
のpはポインタなわけだから、
それを指しているポインタの*tempはその*p[10]のアドレスをいれなきゃいけないから、自分はたとえば、
*p[0]の所を入れたいなら、
temp = &p[0]
とかってするのかなと思っていたんですが、、
もしtemp = p[0]
だと、ポインタに*p[0]という中身、要素を入れている感じがしてしまって、それだと何か普通の変数と一緒なのか?と感じしています。
どなたかご返事お願いできませんか?












この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:ポインタについて 26806 RiSK 2006/05/09 16:34:43
<子記事> Re:ポインタについて 26807 kz3 2006/05/09 22:05:49


No.26806

Re:ポインタについて
投稿者---RiSK(2006/05/09 16:34:43)


>char *temp;
>
>temp = p[0];
>とあった場合、*tempはポインタであるから、

違います。
temp が char* (char型へのポインタ) 型なのであって,
*temp は char 型です。

>たとえば、
>char *temp;
>とあったらchar型の変数のアドレスを入れるから、
>char charcter = '';
>みたいなのがあったとして、
>temp = &charcter;
>とするのはわかるんですけど、

OK.

>さっきの
>char *p[10] = {
>文字列が入っている
>}
>のpはポインタなわけだから、

違います。
p は配列です。(char型へのポインタの配列)

>それを指しているポインタの*tempはその*p[10]のアドレスをいれなきゃいけないから、

先ほどの繰り返しですが,
*temp は char 型ですのでアドレスとは無縁です。
*p[10] のアドレスとは &*p[10] の事ですよ。
それはすなわち p[10] の事です。


宣言における * (アステリスク区切り子)と
演算子の * (間接演算子)は別物です。
きっと,ここら辺の理解が曖昧なのでしょう。


この投稿にコメントする

削除パスワード

No.26811

Re:ポインタについて
投稿者---kz3(2006/05/10 09:24:09)


>それを指しているポインタの *temp はその *p[10] のアドレスをいれなきゃいけないから、
>自分はたとえば、*p[0]の所を入れたいなら、

>    temp = &p[0]
>とかってするのかなと思っていたんですが、、

「*p[0]の所を入れたいなら」というところを、
「ポインタtempを、○○へと向ける」と考えてみてはどうでしょう?
  1. int型へと向けられるポインタの型はint( 型 )へのポインタ型( int * )
  2. char型へと向けられるポインタの型はchar( 型 )へのポインタ型( char * )
  3. char *型へと向けられるポインタの型はchar( 型 )へのポインタ( 型 )へのポインタ型( char ** )



この投稿にコメントする

削除パスワード

No.26813

Re:ポインタについて
投稿者---ぴかちゅう(2006/05/10 13:34:53)


返事が遅くなってしまってすいません。
ありがとうございます。
今、考えている所です。何かきっと一箇所勘違いがとければ、スーと理解
できるような気がしています。



この投稿にコメントする

削除パスワード

No.26807

Re:ポインタについて
投稿者---kz3(2006/05/09 22:05:49)


ポインタを理解するにはとにかくポインタを使ったソースを読んで、
ポインタがどのように使われているのかを覚えることだと思います。

#include <stdio.h> #include <string.h> int main( void ) { char *t[] = { "int","char","float","double","" }; // char 型へのポインタ型の要素の配列 char *pt; // char 型へのポインタ型 char **ppt; // char 型へのポインタ型へのポインタ型 /* 配列tの先頭要素の値( 文字列へのポインタ )を代入 */ pt = t[0]; /* *演算子でポインタの指す要素( char型 )を参照 */ while( *pt != '\0' ){ printf( "%s\n", pt++ ); } /* 配列tの先頭要素の値( 先頭要素へのポインタ )を代入 */ ppt = &t[0]; /* *演算子でポインタの指す要素( char *型 )を参照 */ while( strcmp( *ppt, "" ) ){ printf( "%s\n", *ppt++ ); } return 0; }
あと図を書いて覚えるのも有効だと思います。 ポインタを矢印、ポインタの先を円で表したり...



この投稿にコメントする

削除パスワード

No.26814

Re:ポインタについて
投稿者---ぴかちゅう(2006/05/10 13:36:08)


お返事ありがとうございます。わかりかけているのですが、完全にこうだ、と断言できません。今考えています。サンプルコードまで提示いただきありがとうございました。また投稿しなおします


この投稿にコメントする

削除パスワード

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