• 締切済み

(char*)について

ソースを見ている際に、 以下のようなソースがありました。 構造体Aのメンバ char x char y[5+1] の2つがあり、 ある関数のなかで構造体Aのポインタを引数で渡しており、 それをマクロに対して、 (1)マクロB("あいうえお",(char*)A->x, sizeof(A->x,) ) (2)マクロB("かきくけこ",A->y sizeof(A->y) ) という風にわたしていました。 そこで質問なのですが、(1)に対してだけ第2引数に、(char*)が ついていますが、これはどういった意味があるのでしょうか?

みんなの回答

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.3

A->xはchar型であって、char *型じゃないから なんですけど、そのプログラム、おかしくないですか? 最悪、プログラムがエラーで停止します。 (char*)A->x だと、 A->xに入っている「char型の整数の値」を、「メモリ上のアドレス」と解釈する ってことになります。 例えばA->x = 'a' だとすると、'a'の文字コードのアドレス(ASCIIの場合なら97番地)となります。 構造体Aとも、A->xとも、'a'という文字とも無関係な何かの領域です。

  • ok-kaneto
  • ベストアンサー率39% (1798/4531)
回答No.2

単純に考えればキャストですが... そのマクロBとやらの実引数の型がわからないので想像ですけど。 yは配列yの先頭アドレスですよね。xには何かのアドレスが入っているのではないですか? まあ、それにしても渡すとしたら&(A->x)の方が良いのではとおもいますけど...

回答No.1

A->x はchar*でないからでしょうね。

関連するQ&A