C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: ポインタのポインタのコンパイラ結果の疑問


(過去ログ 50 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■27850 / inTopicNo.1)  ポインタのポインタのコンパイラ結果の疑問
  
□投稿者/ C学習中 (7回)-(2008/11/16(Sun) 12:31:10)

分類:[C/C++] 

お世話になります

ポインタのポインタで躓いています。


#define xalloc(type,size) (type *) malloc(sizeof(type)*size)

char **pptr;

main() のなかで次のコードを書くと

pptr = xalloc(char *,100); //コンパイルOK

pptr = "abcdef"; //コンパイル NG (エラー : 'char *' 型は 'char * *' 型に変換できない)

となります。

同じように見えますがなぜ違いがでるのでしょうか?

私は pptr = xalloc(char *,100); がコンパイルOKになるのが理解できません。
どちらもコンパイルNGが正しい気がします。

宜しくお願いします。




引用返信 編集キー/
■27851 / inTopicNo.2)  Re[1]: ポインタのポインタのコンパイラ結果の疑問
□投稿者/ Hongliang (317回)-(2008/11/16(Sun) 12:47:14)
むしろ同じところが無いように見えますが……。

マクロを展開すれば
> pptr = xalloc(char *,100);
は普通に
pptr = (char * *)malloc(sizeof(char *)*100);
で、どこに疑問の余地があるのでしょうか?
// まあどうせキャストしたらコンパイル自体は通っちゃいますけどねー。
引用返信 編集キー/
■27853 / inTopicNo.3)  Re[2]: ポインタのポインタのコンパイラ結果の疑問
□投稿者/ C学習中 (8回)-(2008/11/16(Sun) 14:12:49)
No27851 (Hongliang さん) に返信
> むしろ同じところが無いように見えますが……。
>
> マクロを展開すれば
>>pptr = xalloc(char *,100);
> は普通に
> pptr = (char * *)malloc(sizeof(char *)*100);
> で、どこに疑問の余地があるのでしょうか?
> // まあどうせキャストしたらコンパイル自体は通っちゃいますけどねー。



Hongliang さん 回答 有難うございます。

ご指摘の通りです。

展開したときに pptr = (char * )malloc(sizeof(char *)*100); となると
思い込んだ単なる私の勘違いでした。
失礼いたしました。




解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -