- ベストアンサー
C言語の問題でわからない内容教えてください
- C言語の問題でわからない内容に関して質問があります。
- 特に、char **q = b;の部分について疑問があります。
- char *b[4] = {"cyan","magenta","yellow","black"};でbをポインタで扱っていると思われますが、qを使用するときにポインタを使うために**にしなければいけないのでしょうか?
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
X b[4] = { ... }; に対して X* p = b; となります。 Xがchar*なら当然 char** p = b; ですよね。
その他の回答 (3)
- noyuo
- ベストアンサー率39% (33/84)
ポインタの配列ですね。以下、unsigned を前提に書きます。 初期の状態では、bとqは同じ文字列定数の同じアドレスを指していますが、 bはポインタの配列なので、b[0],b[1],b[2]のように参照するのに対して、 qはポインタ配列へのポインタなので、q+1 や q++のように順次、指標を移動するような使い方 をするための宣言ですね。q[2]のようにはつかえません。 インクリメントを繰り返した変数qをb[0]の指標をさすように戻す場合は 再度qにbの先頭アドレスを代入するんでしょうね。 ちなみに、質問の例で、 printf("%s\n",(p+1)); の出力結果はわかりますか?red でもgreenでもないですよね。
補足
とりあえずそこは、visualC++でコンパイルすると,edと表示されます。
- koi1234
- ベストアンサー率53% (1866/3459)
(#1にあるんで)最後の2行は置いといてその認識であっています
お礼
ありがとうございます。 #4さんの回答内容であなたの言っている意味がわかりました。 ばかなので理解できませんでした。すいません。 返答ありがとうございました
- επιστημη(@episteme)
- ベストアンサー率46% (546/1184)
> 通常char b[4] = {"cyan","magenta","yellow","black"}; > なら、char *q = b;になるのかということです。 これは無理。"cyan"... はcharではありませんから。 char b[4] = { 'C','M','Y','K' }; char*p = b; これならOK
お礼
早速の回答ありがとうございます。 すいませんが、char **q=b;にしている理由も教えてほしいです。 それは一度、char *b[4]でポインタを使い それを代入したがために 今度は**型のポインタにする必要があるということでしょうか? また、質問となりすいませんが教えてください。
お礼
なるほど、自分が質問のソースでだした、(char*)aの部分の()は 回答者様の言う X* p = b;のbの部分だけで良いのを()つけてわかりやすく しているという概念でよろしいでしょうか? それならば、納得がうまくいく気がします。