3

この動作に関する限り、が のfunction pointerように動作するのはなぜですか? つまり、とを考慮する配列のケースから始めましょう。array pointerlist[]&listlist

 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

4

1 に答える 1