1.求下面函数的返回值
int func(x)
{
int countx = 0;
while(x)
{
countx ++;
x = x&(x-1);
}
return countx;
}
假定x = 9999。 答案:8
思路:将x转化为2进制,看含有的1的个数。
2:复杂声明
以下代码分别表示什么意思?
void * ( * (*fp1)(int))[10];
float (*(* fp2)(int,int,int))(int);
int (* ( * fp3)())[10]();
- void * ( * (*fp1)(int))[10]; fp1是一个指针,指向一个函数,这个函数的参数为int型,函数的返回值是一个指针,这个指针指向一个数组,这个数组有10个元素,每个元素是一个void*型指针。
- float (*(* fp2)(int,int,int))(int); fp2是一个指针,指向一个函数,这个函数的参数为3个int型,函数的返回值是一个指针,这个指针指向一个函数,这个函数的参数为int型,函数的返回值是float型。
- int (* ( * fp3)())[10](); fp3是一个指针,指向一个函数,这个函数的参数为空,函数的返回值是一个指针,这个指针指向一个数组,这个数组有10个元素,每个元素是一个指针,指向一个函数,这个函数的参数为空,函数的返回值是int型。
3、 这段代码中pA,pB,pC是否相等,为什么?
#include <iostream>
using namespace std;
class ClassA
{
public:
virtual ~ ClassA(){};
virtual void FunctionA1(){};
void FunctionA2(){};
};
class ClassB
{
public:
virtual void FunctionB1(){};
void FunctionB2(){};
};
class ClassC : public ClassA,public ClassB
{
public:
void FunctionA1(){};
void FunctionA2(){};
void FunctionB1(){};
void FunctionB2(){};
};
int main()
{
ClassC aObject;
ClassA* pA=&aObject;
ClassB* pB=&aObject;
ClassC* pC=&aObject;
cout<<pA<<endl;
cout<<pB<<endl;
cout<<pC<<endl;
return 0;
}
pA和pC地址相同,pB不同,因为pB添加了一个虚函数,会修改虚函数表的信息
未完,不定时补充。。。。。。。。