C++必知必会复习(六)

1、指针常量和常量指针

(1)指针常量--以常量为中心

在C++中这样声明: int a; int *const b=&a;   //const放在指针声明操作符的右侧

char *a ="abcde1234";  //正确

char *b = "bcde";  //正确

char *const c = &a; //正确

a[0]='x'; //正确

*c[0]='x'; //正确

(2)常量指针--以指针为中心

在C++中这样声明:const int *p;int const *p;

const int *c  = &a; //正确

*c = 6; //错误

可以a = 6;  //改变c 指向的对象值


char *str1, *str2;

str1 = "abcde1234";

str2 = "bcde";

if(stcmp(str1,str2) == 0)

{ printf("str1 equals str2"); }


2、大端模式和小端模式

(1)大端模式

高字节存储在低地址,低字节存储在高地址

(2)小端模式

高字节存储在高地址,低字节存储在低地址


3、Windows消息机制的流程:

A、操作系统接收应用程序的窗口信息,将消息投递到该应用程序的消息队列中

B、应用程序在消息循环中调用getmessage函数从消息队列中取出一条条的消息,取出消息后,应用程序可以对消息进行一些预处理

C、应用程序调用Dispatchmessage,将消息传给操作系统

D、系统应用wndclasss结构体的LPFWNPROC成员保存的窗口过程函数的指针调用窗口过程对消息进行处理。


4、如何定义和实现一个类的成员函数为回调函数?

解释:

如果试图直接使用C++的成员作为回调函数将发生错误,甚至编译不能通过。通过查资料,其错误是普通的C++成员函数都隐含了一个传递作为参数,亦即“this”指针,C++通过传递this指针给其成员函数从而实现程序函数可以访问C++的数据成员。这也可以理解为什么C++类的多个实例可以共享成员函数作为回调函数安装时,就会因为隐含this指针使得函数参数个数不匹配,从而导致回调函数安装失败。要解决问题的关键就是不让this指针起作用。

方法:

     (1)不使用成员函数,为了访问类的成员变量,可以使用友元操作符(friend),在C++中将函数说明为类的友元即可。

     (2)使用静态成员函数,静态成员函数不使用this指针作为隐含参数,这样可以作为回调。    

 静态成员函数特点:

     (1)可以在没有实例的情况下使用

     (2)只能访问静态成员变量和静态成员函数,不能访问非静态成员变量和非静态成员函数。


5、C++里面是不是所有的动作都是main()引起的?如果不是,请举例?

在运行C++程序时,通常从main()函数开始执行。因此,如果没有main()程序将不完整,编译器将指出定义main()函数。

例外情况:如,在Windows中,可以编写一个动态链接库(dll)模块,这是其他Windows程序可以使用的代码。由DLL模块不是独立的程序,因此不需要main()用于专用环境的程序——如机器人中的控制芯片——可能不需要main(),但常规的独立程序都需要main()。


6、c++里面如何声明const void f(void)函数为C程序中库函数?

在该函数前添加extern “C”声明;


7、下面哪个相同:

int b;

A. const int *a = &b;  //*a 是const ,a可改变

b. const *int a = &b;  //a 是const ,但*a可变

c. const int *const a = &b;//a和*a都是const,常量和指针都不变

d. int const *const a = &b;  //a和*a都是const,常量和指针都不变


8、内联函数在编译时是否做参数模型检查?

做类型检查,因为内联函数就是程序编译时,编译时将程序中出现的内联函数的调用表达式用内联函数的函数来代替。

void g(base &b) { b.play }

void main(){

   Son s;

   g(s);

   return;

}


猜你喜欢

转载自blog.csdn.net/u014252478/article/details/80235727