c/c++ 的零碎知识

来源:互联网 发布:java运维管理系统 编辑:程序博客网 时间:2024/05/01 14:08

1.  int  =  4;

     (a++) = +a;            //左侧不是一个有效变量,不能赋值

     (++a) += (a++);    // 真确可以赋值

2.  头文件中的ifndef/define/endif 干什么用?预处理

     防止头文件被重复引用。

3.  在C++ 程序中调用被C 编译器编译后的函数,为什么要加extern “C”声明?

     答:函数和变量被C++编译后在符号库中的名字与C 语言的不同,被extern "C"修饰的变量和函数是按照C 语言方式编译和连接的。

            由于编译后的名字不同,C++程序不能直接调用C 函数。C++提供了一个C 连接交换指定符号extern“C”来解决这个问题。

4.  switch()中不允许的数据类型是?

      实型。

5.  C++中为什么用模板类?

     (1)可以用来创建动态增长和减小的数据结构

     (2)它是类型无关的,因此具有很高的可复用性

     (3)它在编译时而不是运行时检查数据类型,保证了类型安全

     (4)它是平台无关的,可移植性

     (5)可用于基本数据类型

6.  程序什么时候应该使用线程,什么时候单线程效率高。

    (1)耗时的操作使用线程,提高应用程序响应。

    (2)并行操作时使用线程,如C/S 架构的服务器端并发线程响应用户的请求。

    (3)多CPU 系统中,使用线程提高CPU 利用率。

    (4)改善程序结构。一个既长又复杂的进程可以考虑分为多个线程,成为几个独立或半独立的运行部分,这样的程序会利于理解和修改。

             其他情况都使用单线程。

7.  用户级线程和内核级线程比较。

     (1)用户级线程利用线程库提供的创建、同步、调度和管理线程的函数来控制用户线程,

               内核级线程需要内核的参与、有内核来创建、撤销和调度。

     (2)用户级线程不需要占用内核的宝贵空间。

     (3)用户级线程若有一个因I/O而处于等待状态则整个进程就处于等待状态,

               内核级线程则有利于多处理器的并发,但却占用了更多的系统开支。

8. 给结构体成员赋值

     struct A {
           int     a;
           int     b;
           int     c;
     };

     int main (void)
     {

            // 可以用其点成员名字给其成员赋值
           struct A    a = {  .a = 1,    .b = 2,   .c = 3  };

          return 0;
}




0 0
原创粉丝点击