条件变量必须与互斥锁配合(条件变量和互斥锁)

条件变量必须与互斥锁配合(条件变量和互斥锁)说明 1 谈一谈 Volatile 关键字 答案 作用 告诉编译器该变量是容易发生变化的 不能对该变量进行优化 每次取值都必须从内存中取值而不是直接去取之前在寄存器中的值 常见场景 1 多线程使用共享变量 因为多线程是多核操作 同时进行 2 中断 中断程序会修改其他程序中使用的变量 3 硬件寄存器 因为寄存器随时会被修改 好比 AD 转换的寄存器 随时会因为电压变化而修改

大家好,我是讯享网,很高兴认识大家。



 说明:

    1.谈一谈Volatile关键字

    答案:

    作用:告诉编译器该变量是容易发生变化的,不能对该变量进行优化,每次取值都必须从内存中取值而不是直接去取之前在寄存器中的值。

    常见场景:

    1)多线程使用共享变量:因为多线程是多核操作,同时进行。

    2)中断:中断程序会修改其他程序中使用的变量。

    3)硬件寄存器:因为寄存器随时会被修改,好比AD转换的寄存器,随时会因为电压变化而修改。

    4)外部任务会修改变量。

    2.Struct(结构体) (C和C++区别,求结构体大小,使用的注意事项)

    答案:

      3.class和struct的区别?

      答案:

      1)继承权限:class是默认private,struct是public;

      2)访问权限:class作为对象的实现体,默认是私有访问,而struct是作为数据结构的实现体,是共有访问;

      3) class可以用于定义模板,而struct不能。

      4.联合体union和结构体struct的区别

      答案:

       对于联合体所有的成员都共享一块内存,而结构体是所有变量内存的叠加,需要考虑字节对齐问题,对于联合体来说,只要你修改里面的成员的数据就会修改其他成员的数据,而结构体的成员数据是不影响的。

      5.#define和typedef的区别

      答案:

      #define是C语言中定义的语法,是预处理指令,在预处理时进行简单而机械的字符串替换,不作正确性检查,只有在编译已被展开的源程序时才会发现可能的错误并报错。

      typedef是关键字,在编译时处理,有类型检查功能。它在自己的作用域内给一个已经存在的类型一个别名,但不能在一个函数定义里面使用typedef。用typedef定义数组、指针、结构等类型会带来很大的方便,不仅使程序书写简单,也使意义明确,增强可读性。

      6.关于const 你了解多少

      答案:

      (C中的变量:局部,函数形成,返回值,指针,typedef的区别,数组大小定义,case   C++:常函数,常对象)

        7.Extern关键字

        答案:

          8.Register关键字

          答案:

          存在寄存器里面,即cpu,该值不能取地址操作,并且是整数,不能是浮点数。


          讯享网

          9.Auto关键字

          答案:

          一般情况下我们没有特别说明的局部变量都是默认为auto类型,存储在栈中。

          10.关键字static的作用是什么

          答案:

          1.定义变量

          静态全局变量——>作用域只能作用于本文件,每次函数调用该变量都会被初始化。

          静态局部变量—–>生命周期不会随函数结束结束,直到程序结束,但是在函数外面不能使用该变量,只能在函数中使用,该变量是有记忆的,会记住上次的值,该变量只被初始化一次。

          对于这两种变量来说,如果初始化的会在数据段内,未初始化的在.bss段或者初始化为0,这两种变量都会在程序结束才会释放,只不过作用域不同,静态局部变量只限定于函数中,但是该函数结束,该变量并没有被干掉,静态全局变量限定于本文件中。

          2.定义函数

          在函数返回类型前加上static关键字,函数即被定义为静态函数。静态函数只能在本源文件中使用;也就是说在其他源文件中可以定义和自己名字一样的函数。

          3.定义类中的静态成员变量(不能在类里面初始化,不占类内存空间,必须定义才能使用)

          在类中的静态成员变量它即可以被当做全局变量那样存储,但又被隐藏与类中,类中的静态成员变量拥有一块独立的储存空间,不会占用类中的空间,所有的对象都共享该静态成员,也就是说,只要有对象改变了这个值,那么其他对象就会受影响,该数据可以使用this,也可以类中其他函数访问。

          注意:静态数据成员不能在类中初始化,在类中只是声明,而不是定义,静态数据必须要定义之后才能使用,实际上类定义只是在描述对象的蓝图,在其中指定初值是不允许的。也不能在类的构造函数中初始化该成员,因为静态数据成员为类的各个对象共享,否则每次创建一个类的对象则静态数据成员都要被重新初始化。

          4.定义类中的静态成员函数(只能访问静态成员变量)

          静态成员函数也是类的一部分,而不是对象的一部分。所有这些对象的静态数据成员都共享这一块静态存储空间。 注意:静态成员函数不属于任何一个对象,因此C++规定静态成员函数没有this指针(划重点,面试题常考)。既然它没有指向某一对象,也就无法对一个对象中的非静态成员进行访问,即不能在静态函数里面使用this指针。

          11.Sizeof()和strlen()的区别

          答案:

          首先sizeof是关键字,strlen是函数,sizeof用来计算占用内存大小,strlen是用来计算字符串的长度。

          特别是对于需不需要包含0问题:

          sizeof是需要给0计算空间的,strlen是不需要;

          sizeof是在编译的时候计算的,而strlen是在运行的时候计算;

          sizeof计算的是数组的大小即数据类型*[];

          strlen计算的是字符串长度;

          12.new/malloc 与 delete/free(指明大小,返回值,初始化)

          答案:

          1.首先new/delete是运算符,而malloc和free是函数;

          2.new先为对象申请内存空间,然后再调用构造函数进行初始化,同理delete可以调用析构函数释放内存,而 malloc只是申请内存空间并不能调用构造函数进行初始化,同理free也只是释放内存;

          3.malloc的返回值需要强转为自己申请的内存指针,而new不需要;

          4.malloc需要指定申请内存的内存大小,而new是动态申请。

          小讯
          上一篇 2025-05-24 21:28
          下一篇 2025-04-15 10:45

          相关推荐

          版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
          如需转载请保留出处:https://51itzy.com/kjqy/144591.html