この動作に関する限り、が のfunction pointer
ように動作するのはなぜですか? つまり、とを考慮する配列のケースから始めましょう。array pointer
list[]
&list
list
char name[5]= "Eric",(*aptr)[5]=&name;
printf("%p,%p",*aptr,name); //BOTH ARE NUMERICALLY SAME
また、配列要素を(*aptr)[1]
、などと呼ぶこともでき(*aptr)[2]
ます。ここで何が起こっているのか理解できます。
しかし、なぜ同じことが関数に対して機能するのでしょうか?結局のところ、「関数」自体は、配列と同様の要素の連続したメモリ ブロックではありません。これを考慮してください。
fptr
が私のプログラムのように関数ポインタであると仮定します.なぜ と は印刷されたときに同じ値fptr
を*fptr
与えるのですか?さらにはどういう意味ですか?私はポインタを asまたは as*fptr
として使用して関数を呼び出すことができることしか知りませんでしたが、それだけでは何ですか?(*fptr)()
fptr()
*fptr
#include<stdio.h>
void foo(){};
int main(void)
{
void (*fptr)()=foo;
printf("%p,%p",fptr,*fptr);
}
結果- 00401318 00401318