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 */
}
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 */
}
ありがとうございます。
何となく予想はしてましたが、やはり
ポインタのポインタでしか書けないものでしょうか・・・(^-^;)
えでぃ〜の部屋
URLはダミーです。
ポインタのポインタを渡す必要がありますね。
関数のI/Fを
void set_buf(int type, unsigned char** buf_target)
にして
set_buf(0, &my_buf)
で呼びます。
関数内は
*buf_target = a;
のように書きます。
ありがとうございます。
--------------------------------------------------------
うーん、ポインタのポインタしか無さそうですね。(^-^;)
何となく見た目が一般的で無いのが嫌だったのですが・・・
とりあえず解決致しましたのでコレにて閉めます。
ke_ishi様、sakuneko様、EddyYamanaka様
いづれ様の回答も的確でした。機会あればまたお願いします。
回答者 | 回答 | 受取 | ベストアンサー | 回答時間 | |
---|---|---|---|---|---|
1 | ![]() |
236回 | 219回 | 0回 | 2005-06-21 12:41:17 |
ポインタのポインタにしろということでしょうか?
ポインタmy_bufを扱うことであたかも実際のバッファa,b,cを触っている感じをしたいのです。