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

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

 詳しくはこちら



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

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


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

No.19163

ポインタに関して
投稿者---とと(2005/01/13 15:33:04)


char m[10][10];
という多次元配列変数があるとします。
そこで、mとしてもm[0]としても同じアドレス(m[0][0]のアドレス)が帰ってきますが、
sizeofで調べると大きさが違います。
何が違うのでしょうか?


この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:ポインタに関して 19164 RiSK 2005/01/13 15:39:25
<子記事> Re:ポインタに関して 19180 とと 2005/01/13 23:18:14


No.19164

Re:ポインタに関して
投稿者---RiSK(2005/01/13 15:39:25)


>char m[10][10];
>という多次元配列変数があるとします。
>そこで、mとしてもm[0]としても同じアドレス(m[0][0]のアドレス)が帰ってきますが、
>sizeofで調べると大きさが違います。
>何が違うのでしょうか?

型が違います。

m は char [10][10] 型
m[0] は char [10] 型
m[0][0] は char 型

# ですよね? 書いてて不安に…


この投稿にコメントする

削除パスワード

No.19180

Re:ポインタに関して
投稿者---とと(2005/01/13 23:18:14)


有難うございます。
では、&mだとchar *[10][10]、&m[0]だとchar *[10]が返されるのでしょうか?



この投稿にコメントする

削除パスワード

No.19182

Re:ポインタに関して
投稿者---YuO(2005/01/14 00:17:00)


>では、&mだとchar *[10][10]、&m[0]だとchar *[10]が返されるのでしょうか?

char *[10][10]というのは,
array[10] of array[10] of pointer to char
ですから,&mの型とは異なります。

&mの型は
pointer to array[10] of array[10] of char
ですから,char (*)[10][10]となります。

同じく,&m[0]の型は
pointer to array[10] of char
ですから,char (*)[10]となります。
#ポインタ宣言子よりも配列宣言子や関数宣言子の方が結合力が強いです。



この投稿にコメントする

削除パスワード

No.19189

Re:ポインタに関して
投稿者---とと(2005/01/14 04:14:46)


ありがとうございます。
では、
char m[10];
char *ppp;
ppp = &m;
と云った場合、一々に(char *)とキャストしなくてもpppがchar *型ですので、&mの返すアドレスは自動的にchar *型へ変換されると考えて正しいでしょうか?

参考書に独習Cを使用しているのですが、多次元配列変数のポインタの型には殆どノータッチですので、質問が多くなり申し訳が無いです。(もしかしたらこの先で触れているのかも知れませんが^^;)


この投稿にコメントする

削除パスワード

No.19199

Re:ポインタに関して
投稿者---YuO(2005/01/14 12:17:23)


>と云った場合、一々に(char *)とキャストしなくてもpppがchar *型ですので、&mの返すアドレスは自動的にchar *型へ変換されると考えて正しいでしょうか?

Cにおいては変換されます。
#C++では型が違うのでエラー。

ただし,&m[0]と&mは区別して考えるべきです。
Cでは,任意のオブジェクト型(or 不完全型)へのポインタ型から,
任意のオブジェクト型(or 不完全型)へのポインタ型への標準変換が存在します。
そのため,&mをchar *へ代入するような,型を無視した代入が存在すると,
他人(3日後の自分を含む)が読んだときに,ポインタの代入に神経をとがらせざるを得なくなります。



この投稿にコメントする

削除パスワード

No.19202

Re:ポインタに関して
投稿者---とと(2005/01/14 13:11:40)


何度も何度も本当にありがとうございます。
では、char (*)[10]型のポインタを作成するにはどうすればよいのでしょうか?


この投稿にコメントする

削除パスワード

No.19208

Re:ポインタに関して
投稿者---REE(2005/01/14 14:08:46)


>では、char (*)[10]型のポインタを作成するにはどうすればよいのでしょうか?

char (*p)[10];



この投稿にコメントする

削除パスワード

No.19209

Re:ポインタに関して
投稿者---YuO(2005/01/14 14:11:44)


>では、char (*)[10]型のポインタを作成するにはどうすればよいのでしょうか?

char [10][10]型のオブジェクトの識別子を一次式として使った場合,
たいていの場合はchar (*)[10]型のポインタが生成されます。


この投稿にコメントする

削除パスワード

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