名为flagp的变量声明为指向布尔值的指针??*&x与x有什么区别??&*x与x又有什么区别??
指向布尔值(其他基本类型也可以照这样的思路)的指针----指向该指针得到,也就是取该指针所指向的数据的类型是BOOL类型。
所以要得到这样类型的变量,就先指向它吧 ----》 *flagp .
这个不难吧
然后它的类型是BOOL类型的,所以就是这样:bool *flagp
然后加个分号:
bool *flagp;
如果声明后立即会对它进行赋值的操作可以不用初始化,否则请初始化它:bool *flagp = NULL;
LZ,当你要设计一个东西,但是有不知道怎么设计的时候,先给这个东西定个名字,
然后假设它已经是被设计出来的了, 然后你要用它, 然后开始最简单的层面开始分析它具有的属性,特征,作用等等。
然后把这些东西提取出来, 然后根据他们的逻辑关系逐一再融合回去。就可以设计框架了,也基本就可以设计出来了。
当然这个是思路,不是随便就容易做到,要多做熟练,要多练习。
举个例子:要定义一个
指向返回类型为bool接受两个bool类型参数的函数指针数组。
先给个名字: point;
首先应该很明白的知道我们定义的是一个数组,所以使用起来就是这样:point[]
然后数组的每个元素是个指针,所以要使用这个指针的数据就要这样:*(point[])
该指针的类型是函数指针,也就是说,取这个指针的数据,会得到一个函数,
这样我们就得到了一个函数的名字,也就是函数的地址,只不过现在函数名字是一个表达式:*(point[])。
现在可以调用一个函数了,怎么调用呢?给名字,给参数,就可以调用了:*(point[])(参数列表)
现在分析函数的参数列表:有两个, 第一个是bool,第二个是bool。所以就是:*(point[])(bool arg1, bool agr2)
函数都有返回值,这个函数的返回值是bool,所以就是:bool *(point[])(bool arg1, bool agr2)
然后再看看有什么问题没?
没有初值,所以给初始化,既然数组的元素的类型是函数指针,也就是指向函数的指针,那么只要赋值一个指向函数的指针就是了
而每个函数的名字就是这个函数自己的首地址,自己就是自己的指针,所以也可以直接赋值函数的名字。
一个我们自己定义或是库定义的函数名就是一个 函数常量
一个存放函数地址 (名字)
的指针就是一个 函数变量
这时如果有这样的两个函数,和一个函数指针:
bool
f1(bool b1, bool b2);
{
return b1 && b2;
}
bool
f2(bool b3, bool b4)
{
return !b3 && !b4;
}
bool (*pb)(bool arg1, bool agr2) = f2;
那么我们上面定义的数组就可以这样初始化:
bool *(point[])(bool arg1, bool agr2) = {b1, b2, *pb(也可以直接写pb,还是建议写*pb,至少让人一眼就能看出是个函数指针变量)};
好了,就说到这里吧。
PS,函数指针数组在搭建框架和包装函数上很有用哦。
现在有急事,还有2个下来再说,或是看其他人的回答吧
[
本帖最后由 死了都要C 于 2011-11-28 12:19 编辑 ]