関数func
は、voidパラメータbuf
をとります。私はfunc
と呼んでbuf
に1から10までの値を挿入したいと思います。ただし、buf
のアドレスはfunc
とmain
で異なり、印刷される値は1〜10ではありません。誰でもこの問題を解決できますか?ありがとう!voidパラメータを持つ関数
void func(int n, void *buf);
int main()
{
void *buf;
func(10,buf);
for(int i=0;i<10;i++){
printf("%d\n", ((char*)buf)[i]);
}
printf("in main, after func: %p\n",buf);
}
void func(int n, void *buf)
{
(char*)buf;
char my_array[n];
for(int i=0;i<n;i++){
my_array[i]=i;
}
buf = my_array;
printf("in func: %p\n",buf);
}
"関数funcは、パラメータbufを無効にします" - いいえ、それはありません! 'buf'は' void * 'であり、' void'ではありません。そしてあなたの 'main'署名は' int main(void) 'でなければなりません。なぜあなたのコンパイラーはあなたを助けてくれませんか?本当に必要ない場合は、 'void *'を使わないでください。キャストにも同じ。タイプセーフなコードを書くと、それ以外のものはメンテナンスの悪夢です。 – Olaf