以下のような関数set_bufにて②の地点で

my_buf == a としたいのですが、上手くいきません。
①の地点では問題なく buf_target == a となっているのですが・・・

久々にポインタで嵌ってしまいました。
詳しい方、正常なソース及び解説をお願いします。
ちなみにポインタの基礎的な知識はあるつもりですので
そういったページのアドレスは不要です。

環境:VisualC++ 6.0SP4+ WindowsXP SP2
----------------------------------------------------------------
unsigned chara_buf[A_BUF_SIZE];
unsigned charb_buf[B_BUF_SIZE];
unsigned charc_buf[C_BUF_SIZE];

void main(void)
{
unsigned char*my_buf;

a[0] = 1;
set_buf(0, my_buf);

/* ②my_buf != a */
}


void set_buf(int type, unsigned char *buf_target)
{
switch(type){
case 0:
buf_target = a;
break;

case 1:
buf_target = b;
break;

case 2:
buf_target = c;
break;
}

/* ①buf_target == a */
}

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:
  • 終了:--
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答4件)

id:ke_ishi No.1

回答回数269ベストアンサー獲得回数0

ポイント25pt

え、

set_buf(0, &my_buf);

とかいう話ではなくて、ですか?

id:syuzabu

ポインタのポインタにしろということでしょうか?

ポインタmy_bufを扱うことであたかも実際のバッファa,b,cを触っている感じをしたいのです。

2005/06/21 12:35:09
id:sakuneko No.2

回答回数18ベストアンサー獲得回数0

ポイント25pt

http://www.hatena.ne.jp/1119323311

人力検索はてな - 以下のような関数set_bufにて②の地点で my_buf == a としたいのですが、上手くいきません。 ①の地点では問題なく buf_target == a となっているのですが・・・ 久々にポ..

URLはダミーです。ポインタのポインタを使ってみてはいかがでしょうか?


void main(void)

{

unsigned char *my_buf;


a[0] = 1;

set_buf(0, &my_buf);


if (my_buf == a) printf(”2 あたり!”);


/* ②my_buf != a */

}


void set_buf(int type, unsigned char **buf_target)

{

switch(type){

case 0:

*buf_target = a;

break;


case 1:

*buf_target = b;

break;


case 2:

*buf_target = c;

break;

}

if (*buf_target == a) printf(”set_buf()の中¥n”);

/* ①buf_target == a */

}

id:syuzabu

ありがとうございます。

何となく予想はしてましたが、やはり

ポインタのポインタでしか書けないものでしょうか・・・(^-^;)

2005/06/21 12:39:10
id:EddyYamanaka No.3

回答回数385ベストアンサー獲得回数1

ポイント25pt

http://yama.eddy.com/

えでぃ〜の部屋

URLはダミーです。

ポインタのポインタを渡す必要がありますね。

関数のI/Fを

void set_buf(int type, unsigned char** buf_target)

にして

set_buf(0, &my_buf)

で呼びます。

関数内は

*buf_target = a;

のように書きます。

id:syuzabu

ありがとうございます。

--------------------------------------------------------

うーん、ポインタのポインタしか無さそうですね。(^-^;)

何となく見た目が一般的で無いのが嫌だったのですが・・・

とりあえず解決致しましたのでコレにて閉めます。

ke_ishi様、sakuneko様、EddyYamanaka様

いづれ様の回答も的確でした。機会あればまたお願いします。

2005/06/21 12:44:20

質問者が未読の回答一覧

 回答者回答受取ベストアンサー回答時間
1 gio 236 219 0 2005-06-21 12:41:17
  • id:Kumappus
    実際にどういうアセンブラコードが出力されるか

    見ておくといいですよ。
    VC++だとめんどくさいんでgccとか使って。
  • id:samejima
    C++参照型

    > 環境:VisualC++ 6.0SP4
    CではなくC++で書いても良いのなら、参照型を使うことで可能。
  • id:EddyYamanaka
    もと、どうしても

    「ポインタのポインタ」が嫌なら…
    1.ポインタをリターンで返す
    2.グローバルにする
    3.参照を使用する
    ですね。
  • id:syuzabu
    ありがとうございます。

    皆々様、アドバイスありがとうございます。

    アセンブラコードは読めないんですよね、gccも使えない。(T-T)
    も少し頭が良くなったらアセンブラコードも見てみます。

    あと今回はVC++で作っているのですが、最終的には
    組込みの方で利用するのでC言語しか使えません。
    なので参照は今回は使えません。(~-^;)

    とりあえずポインタのポインタで行きます。
    何か文句言われてから他の方法を検討しようかと。

    >「ポインタのポインタ」が嫌なら…
    >1.ポインタをリターンで返す
    >2.グローバルにする
    >3.参照を使用する
    >ですね。

この質問への反応(ブックマークコメント)

トラックバック

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません