近期刷题知识点

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_38313246/article/details/81945384

1.一个C语言程序是由()。

正确答案: B  

函数组成

 

  1. 在16位C编译系统上,下列程序执行后的输出结果是()。

void main()

{int a=-32769;printf("%8U\n",a);}

 

8U:

格式字符必须小写,题中的”%8U”不会当作格式控制符,而是原样输出,变

量a将没有对应的格式说明,也不会输出

 

 

C语言中%d,%o,%f,%e,%x的意义

格式说明由“%”和格式字符组成,如%d%f等。它的作用是将输出的数据转换为指定的格式输出。格式说明总是由“%”字符开始的。不同类型的数据用不同的格式字符。 
格式字符有d,o,x,u,c,s,f,e,g等。 

%d整型输出,%ld长整型输出,

%o以八进制数形式输出整数,

%x以十六进制数形式输出整数,

%u以十进制数输出unsigned型数据(无符号数)。

%c用来输出一个字符,

%s用来输出一个字符串,

%f用来输出实数,以小数形式输出,

%e以指数形式输出实数,

%g根据大小自动选f格式或e格式,且不输出无意义的零。

scanf(控制字符,地址列表) 
格式字符的含义同printf函数,地址列表是由若干个地址组成的表列,可以是变量的地址,或字符串的首地址。如scanf("%d%c%s",&a,&b,str);

 

注意:

scanf输入double时只接受le或lf,不接受f

 

程序运行的时候,静态成员已经加载在内存里面了,但是包含静态成员的对象共享这些静态成员
比方说,A有一个静态成员public static int i;那么程序运行的时候,这个i就加载进内存了,A的所有对象的i变量都指向这个静态空间的i,也就是说创建对象之前,它就占空间了

 

void func(char *p)

{

    p=p+1;

}

int main()

{

    char s[]={'1','2','3','4'};

    func(s);

    printf("%c",*s);

    return 0;

}

以下程序执行后的输出结果为()

1:

p是一个指针,s也是一个指针,指针传指针,还是相当于值传递,函数调用时将s的内容(即字符'1'的地址)拷贝给p,p+1不会对s产生任何影响

 

使用对象名调用虚函数,是静态联编;

使用基类指针调用虚函数,是动态联编;

 

 

注释:include   ""是先从本地目录开始寻找,然后去寻找系统路径,而Include   <>   相反先从系统目录,后从本地目录,

 

typedef struct list_t{

struct list_t *next;

struct list_t *prev;

char data[0];

}list_t;

请问在32位系统中,sizeof(list_t)的值为? 8

 

在用作定义时char[0]是空数组,是不占空间的。如果定义char[1],那么就是长度为1的数组,使用char[0]则表示这唯一的数据,注意差别啦

 

在C++,下列哪一个可以做为对象继承之间的转换

dynamic_cast

reinterpret_cast:一个指针转化为其他类型的指针时,不做类型检测,操作结果是一个指针指向另一个指针的值的二进制拷贝;

static_cast:允许执行隐式转换和相反的转换操作,父类转换为子类是强制转换Son *son=static_cast(father),而子类转换为父类就是隐式转换;

dynamic_cast:用于对象的指针和引用,当用于多态类型转换时,允许隐式转换及相反的过程中,与static_cast的不同之处在于,在相反的转换过程中,dynamic_cast会检测操作的有效性,如果返回的不是被 请求的 有效完整对象,则返回null,反之返回这个有效的对象,如果是引用返回无效时则会抛出bad_cast异常;

const_cast:这个转换操作会操纵传递对象的const属性,或者设置或者移除该属性。

 

 

若全局变量仅在单个C 文件中访问,则可以将这个变量修改为静态全局变量,以降低模块间的耦合度

 

 

以下代码的运行结果为:

class Base {

public:

Base() {echo();}

virtual void echo() {printf(“Base”);}

};

  

class Derived:public Base {

public:

Derived() {echo();}

virtual void echo() {printf(“Derived”);}

};

  

int main() {

Base* base = new Derived();

base->echo();

return 0;

}

 

Base

Derived

Derived

Base* base = new Derived();

//首先将上面的语句分成两部分:

//前一部分是基类指针指向子类对象实现动态绑定,后一部分是new了一个子类对象;

//语句执行时,先执行后一部分new Derived()这句话,它会调用Derived() {echo();}

//而执行派生类的构造函数时,会先去执行基类的构造函数,所以会调用Base() {echo();},此时不涉及到虚函数的动态绑定,

//因为我们现在才执行了后一部分,还没有动态绑定,所以正常调用基类的echo()函数,执行完后返回到子类的构造函数,执行子类的echo();

//然后执行前一部分,实现虚函数的动态绑定。

base->echo();

//此时考察的就是虚函数的使用了,基类echo申明为虚函数,所以调用时会去子类寻找对应的虚函数执行。

 

 

猜你喜欢

转载自blog.csdn.net/qq_38313246/article/details/81945384