1.广义表的取表尾运算,其结果通常是个表,但有时也可是个单元素值()
错误:
表头可以为表或单元素值
表尾是指除去表头后剩下的元素组成的表(即使只剩一个元素也视为表),可以为空表
2.这段程序的输出是()
void foo(int b[][3])
{
++b;
b[1][1]=9;
}
void main()
{
int a[3][3]={{1,2,3},{4,5,6},{7,8,9}};
foo(a);
printf(“%d”,a[2][1]);
}
int b[][3]即是int(*b)[3],b是指向有三个int元素数组的指针;数组做形参退化为指针。
a[3][3]可以看作是含有三个一维数组元素的数组;
b开始指向a[0][0],++b后,b指向a[1][0],而b[1][1] =b[1]+1=*(b+1)+1即 指向a[2][1],
b[1][1]=9;即a[2][1]=9。
3.在linux下64位c程序,请计算输出的三个sizeof分别是()
void func(char str_arg[100])
{
cout<<sizeof(str_arg)<<endl;
}
int main(int argc,char* argv[])
{
char str[]="Hello";
char *p=str;
cout<<sizeof(str)<<endl;
cout<<sizeof(p)<<endl;
func("test");
return 0;
}
sizeof(str)测量的是字符数组的占用长度,注意字符串后还有个\0,所以是6
sizeof(p)测量的是指针的占用长度,64位系统下是8字节
sizeof(str_arg)测量的是指针长度,因为这里是形参。
4.对静态成员的不正确描述()
A. 静态成员不属于对象,是类的共享成员
B. 静态数据成员要在类外初始化
正确:静态成员可在类体内定义,也可以在类体外定义,需在类外初始化
C. 调用静态成员函数时要通过类或对象激活,所以静态成员函数拥有this指针
错误:不存在this指针
D. 非静态成员函数也可以操作静态数据成员
5.在一个cpp文件里面,定义了一个static类型的全局变量,下面一个正确的描述是:
A. 只能在该cpp所在的编译模块中使用该变量
正确
B. 该变量的值是不可改变的
C. 该变量不能在类的成员函数中引用
D. 这种变量只能是基本类型(如int,char)不能是C++类型
6.由多个源文件组成的C程序,经过编辑、预处理、编译,链接等阶段会生成最终的可执行程序。下面哪个阶段可以发现被调用的函数未定义?
编译时只是把函数的符号地址记录下来,
链接
时该函数符号有定义才会变成具体的地址。如果链接过程中所有符号都有定义,链接成功,生成可执行文件;否则链接失败。
7.构造函数中,成员变量一定要通过初始化列表来初始化的是
有一个类B继承自类A,他们数据成员如下:
class A {
...
private:
int a;
};
class B : public A {
...
private:
int a;
public:
const int b;
A &c;
static const char* d;
B* e;
}
构造函数初始化时必须采用初始化列表一共有三种情况,
1.需要初始化的数据成员是对象(继承时调用基类构造函数)
2.需要初始化const修饰的类成员
3.需要初始化引用成员数据
b c
8.(1)若按4字节对齐sizeof(CTest)的值是多少? (2)若按1字节对齐sizeof(CTest)的值是多少?
若char是一字节,int是4字节,指针类型是4字节,代码如下:
class CTest
{
public:
CTest():m_chData(‘\0’),m_nData(0)
{
}
virtual void mem_fun(){}
private:
char m_chData;
int m_nData;
static char s_chData;
};
char CTest::s_chData=’\0’;
1.在类中,如果什么都没有,则类占用1个字节,一旦类中有其他的占用空间成员,则这1个字节就不在计算之内,如一个类只有一个int则占用4字节。
2.如果只有成员函数,则还是只占用1个字节,因为类函数不占用空间
3.虚函数因为存在一个虚函数表,需要4个字节,
4.数据成员对象如果为指针则为4字节,注意有字节对齐。
virtual void mem_fun(){}; 占4个字节,
char m_chData; 占1个字节,
int m_nData; 占4个字节;
按照4字节对齐就是 4 4 4即12字节;
按照1字节对齐就是 4 1 4 即9字节。
9.在32位编译器下sizof(P)为()
class P
{
private:
int ival;
public:
P();
~P();
int GetVal(){
return ival;
};
virtual int SetVal(int val)
{
ival=val;
};
};
int ival; 占4字节
virtual int SetVal(int val) ; 占4字节
sizof(P)=8。
10.在C语言中,关于静态变量的说法,正确的有()
A. 静态变量和常量的作用相同
错误
B. 函数中的静态变量,在函数退出后不被释放
正确:函数中的静态变量是静态局部变量 函数退出后不被释放 在程序运行结束时才释放。
C. 静态变量只可以赋值一次,赋值后则不能改变
错误:静态变量存储在全局存储区,直到程序结束后才会被释放,只进行一次初始化,以后的值是上一次使用过后的值,也即是可变的,而变量是不可变的。
D. 静态全局变量的作用域为一个程序的所有源文件
错误:静态全局变量的作用域只能是定义它的文件里,不是被其他文件使用。