专项练习:数组和字符串(三)

  • Post author:
  • Post category:其他


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是一字节,int4字节,指针类型是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. 静态全局变量的作用域为一个程序的所有源文件

错误:静态全局变量的作用域只能是定义它的文件里,不是被其他文件使用。



版权声明:本文为wang_weina原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。