関数へのポインタ
Posted: 2012年3月10日(土) 20:49
はじめましてm(_ _)m
最近プログラミングの勉強を始めて、「猫でもわかるC言語プログラミング」という本に従って勉強しているんですが、ちょっとわからないところが出てきたので教えて頂けるとありがたいです。
小題は「関数へのポインタ」で、以下のように打ち込みました。
#include <stdio.h>
int func(int);
int main()
{
int (*ptr1)(), (*ptr2)();
ptr1 = main;
ptr2 = func;
printf("main関数のアドレス = %p, ptr1 = %p\n", main, ptr1);
printf("func関数のアドレス = %p, ptr2 = %p\n", func, ptr2);
return 0;
}
int func(int x)
{
printf("x = %d\n", x);
return 0;
}
これをビルドしてみたところ、エラーが出てうまくいきませんでした。
1>------ ビルド開始: プロジェクト: funcptr02, 構成: Debug Win32 ------
1> funcptr02.cpp
1>c:\users\shigeki\documents\visual studio 2010\projects\funcptr02\funcptr02\funcptr02.cpp(12): error C2440: '=' : 'int (__cdecl *)(int)' から 'int (__cdecl *)(void)' に変換できません。
1> この変換には reinterpret_cast, C スタイル キャストまたは関数スタイルのキャストが必要です。
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========
という文が表示されます。
ポインタに関しても知識が乏しいので、何が原因でこうなったのか分かりません。
どなたかお力を貸してくださいm(_ _)m
環境は、Windows7で、コンパイラはVisual C++ 2010を使っています
最近プログラミングの勉強を始めて、「猫でもわかるC言語プログラミング」という本に従って勉強しているんですが、ちょっとわからないところが出てきたので教えて頂けるとありがたいです。
小題は「関数へのポインタ」で、以下のように打ち込みました。
#include <stdio.h>
int func(int);
int main()
{
int (*ptr1)(), (*ptr2)();
ptr1 = main;
ptr2 = func;
printf("main関数のアドレス = %p, ptr1 = %p\n", main, ptr1);
printf("func関数のアドレス = %p, ptr2 = %p\n", func, ptr2);
return 0;
}
int func(int x)
{
printf("x = %d\n", x);
return 0;
}
これをビルドしてみたところ、エラーが出てうまくいきませんでした。
1>------ ビルド開始: プロジェクト: funcptr02, 構成: Debug Win32 ------
1> funcptr02.cpp
1>c:\users\shigeki\documents\visual studio 2010\projects\funcptr02\funcptr02\funcptr02.cpp(12): error C2440: '=' : 'int (__cdecl *)(int)' から 'int (__cdecl *)(void)' に変換できません。
1> この変換には reinterpret_cast, C スタイル キャストまたは関数スタイルのキャストが必要です。
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========
という文が表示されます。
ポインタに関しても知識が乏しいので、何が原因でこうなったのか分かりません。
どなたかお力を貸してくださいm(_ _)m
環境は、Windows7で、コンパイラはVisual C++ 2010を使っています