人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

以下のような関数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 */
}

●質問者: syuzabu
●カテゴリ:ビジネス・経営 コンピュータ
✍キーワード:?B C++ CASE Char switch
○ 状態 :終了
└ 回答数 : 3/4件

▽最新の回答へ

1 ● ke_ishi
●25ポイント

http://www.google.com/

Google

え、

set_buf(0, &my_buf);

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

◎質問者からの返答

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

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


2 ● sakuneko
●25ポイント

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 */

}

◎質問者からの返答

ありがとうございます。

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

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


3 ● EddyYamanaka
●25ポイント

http://yama.eddy.com/

えでぃ〜の部屋

URLはダミーです。

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

関数のI/Fを

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

にして

set_buf(0, &my_buf)

で呼びます。

関数内は

*buf_target = a;

のように書きます。

◎質問者からの返答

ありがとうございます。

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

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

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

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

ke_ishi様、sakuneko様、EddyYamanaka様

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ