- 论坛徽章:
- 0
|
当我读到一下代码:
int func_A1(void*, void*, void*);
int func_A2(void*, void*, void*);
int func_A3(void*, void*, void*);
int func_B1(void*, void*, void*);
int func_B2(void*, void*, void*);
int func_B3(void*, void*, void*);
int (*p_A[])(void*, void*, void*)=
{
func_A1,
func_A2,
func_A3
}
int (*p_B[])(void*, void*, void*)=
{
func_B1,
func_B2,
func_B3
}
int(**p[])(void*, void*, void*)=
{
p_A,
p_B
}
1.我对p_A和p_B的理解是:是个指针数组,指针数组的每一个元素是一个指向函数的指针。Array of pointers to functions
2.我对p的理解是:是个指针数组,它的每个元素是一个指针,每一个指针是指向一个指向一个函数的指针。Array of pointers to pointers to functions.
3.如果以上2个理解都是正确的话,那么p_A 与p_B在两个理解中的类型就不一样啦。在1中,它们是数组名,在2中他们是个指针。我知道数组名就是指向这个数组首地址的指针 (不知道在这里这样理解对不对?),但稍后我又看到如下应用代码:
int (** p1)(void*, void*, void*)=p[n]
int (* p2)(void*, void*, void*)=p1[m]
难道身为int(**)( , , )类型的p1可以和身为int (*[])(, , )的p_A与p_B等价吗? 难道不需要象征性的类型转换吗?
PS:写到这的时候,我基本崩溃了。。。我对指针的基本概念理解太差了。。。。 |
|