• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:C言語の問題でわからない内容教えてください。)

C言語の問題でわからない内容教えてください

このQ&Aのポイント
  • C言語の問題でわからない内容に関して質問があります。
  • 特に、char **q = b;の部分について疑問があります。
  • char *b[4] = {"cyan","magenta","yellow","black"};でbをポインタで扱っていると思われますが、qを使用するときにポインタを使うために**にしなければいけないのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
回答No.4

X b[4] = { ... }; に対して X* p = b; となります。 Xがchar*なら当然 char** p = b; ですよね。

yorosi18
質問者

お礼

なるほど、自分が質問のソースでだした、(char*)aの部分の()は 回答者様の言う X* p = b;のbの部分だけで良いのを()つけてわかりやすく しているという概念でよろしいでしょうか? それならば、納得がうまくいく気がします。

その他の回答 (3)

  • noyuo
  • ベストアンサー率39% (33/84)
回答No.3

ポインタの配列ですね。以下、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でもないですよね。

yorosi18
質問者

補足

とりあえずそこは、visualC++でコンパイルすると,edと表示されます。

  • koi1234
  • ベストアンサー率53% (1866/3459)
回答No.2

(#1にあるんで)最後の2行は置いといてその認識であっています

yorosi18
質問者

お礼

ありがとうございます。 #4さんの回答内容であなたの言っている意味がわかりました。 ばかなので理解できませんでした。すいません。 返答ありがとうございました

回答No.1

> 通常char b[4] = {"cyan","magenta","yellow","black"}; > なら、char *q = b;になるのかということです。 これは無理。"cyan"... はcharではありませんから。 char b[4] = { 'C','M','Y','K' }; char*p = b; これならOK

yorosi18
質問者

お礼

早速の回答ありがとうございます。 すいませんが、char **q=b;にしている理由も教えてほしいです。 それは一度、char *b[4]でポインタを使い それを代入したがために 今度は**型のポインタにする必要があるということでしょうか? また、質問となりすいませんが教えてください。

関連するQ&A