zoukankan      html  css  js  c++  java
  • 信捷电气

    1. char i = 1;

        printf("%d",i);    //char字节用printf以整数型打印出来

    2. int (*a[10])int

     a[10]是函数指针数组

    #include <stdio.h>
    #include <Windows.h>
    
    int func1(int n)
    {
        printf("func1: %d
    ", n);
        return 0;
    }
    
    int func2(int n)
    {
        printf("fun2: %d
    ", n);
        return n;
    }
    
    int main()
    {
        int (*a[10])(int) = { NULL };
        a[0] = func1;
        a[1] = func2;
        a[0](1);
        a[1](2);
    
        return 0;
    }

    3. malloc/free 和 new/delete的区别

      相同点:都可用于申请动态内存和释放内存

      不同点:

    • malloc/free是C++/C语言的标准库函数,new/delete是C++的运算符。对于非内部数据类的对象而言,光用malloc/free无法满足动态对象的要求。对象在创建的同时要自动执行构造函数,对象消亡之前要自动执行析构函数。由于malloc/free是库函数而不是运算符,不在编译器控制权限之内,不能够把执行构造函数和析构函数的任务强加malloc/free。
    • 运算符new 使用起来要比函数malloc 简单得多,例如:int *p1 = (int *)malloc(sizeof(int) * length);   int *p2 = new int[length];

              这是因为new 内置了sizeof、类型转换和类型安全检查功能。对于非内部数据类型的对象而言,new 在创建动态对象的同时完成了初始化工作。如果对象有多个构造函数,那么            new 的语句也可以有多种形式。

    内部数据类型是编译器本来就认识的,不需要用户自己定义,如int,char,double
    非内部数据类型不是编译器本来就认识的,需要用户自己定义才能让编译器识别,如enum,union,class、struct

    运算符使用是否正确,编译器在编译扫描分析时就可以判定
    库函数是已编译的代码,编译器不会编译检查,由链接器将库同用户写的代码合成exe文件

    见:C++内部数据类型和非内部数据类型

            malloc/free与new/delete的区别

    4.float变量的大小比较,能否使用if来比较,如果不可以,该怎么办

    浮点数的表示是不精确的,float 和 double 都不能保证可以把所有实数都准确的保存在计算机中

    #include <stdio.h>  
      
    int main(int argc, char *argv[])  
    {  
        float f = 99.9f;  
        printf("f = %f
    ", f);   //f = 99.900002
          
        return 0;  
    }  

    由于浮点数的表示是不精确的,所以不能直接比较两个数是否完全相等。一般都是在允许的某个范围内认为某个个浮点数相等,如有两个浮点数a、b,允许的误差范围为 1e-6,则 abs(a-b) <= 1e-6,即可认为 a 和 b 相等。

    还有一种方法就是扩大再取整,见:判断两个float变量是否相等以及和 0 值比较方法

    5. struct 对象的大小比较,能否使用if来比较或者memcpy来比较

    C语言没有提供语言工具来执行此操作,需要逐个成员进行比较。

    不能用memcmp: 因为该函数是通过内存一字节一字节的比较内容来实现的,又因为struct存在内存对齐的问题,所以被填充的字节部分一般都是一些随机或者无效的内容,多少情况下内容都是不一样的,所以不能用内存比较函数。

    6. 用递归的算法求1,1,2,3,5,8.......的第30位数是多少,然后求这些数的和. 

    class Solution {
    public: 
        int num(int i)    //第i位数是多少
        {
            if (i == 1)
                return 1;
            else if (i == 2)
                return 1;
            else
                return num(i - 1) + num(i - 2);
        }
    public: 
        int sum(int i)   //所有数的和
        {
            if (i == 1)
                return 1;
            else if (i == 2)
                return 2;
            else
                return sum(i - 1) + num(i);
    
        }
    };

    7. 字符型环形缓冲区的插入

    8. 线程与进程的区别

    • 进程是资源分配的最小单位,线程是程序执行的最小单位(资源调度的最小单位)
    • 进程有自己的独立地址空间,每启动一个进程,系统就会为它分配地址空间,建立数据表来维护代码段、堆栈段和数据段,这种操作非常昂贵。
              而线程是共享进程中的数据的,使用相同的地址空间,因此CPU切换一个线程的花费远比进程要小很多,同时创建一个线程的开销也比进程要小很多。
    • 线程之间的通信更方便,同一进程下的线程共享全局变量、静态变量等数据,而进程之间的通信需要以通信的方式(IPC)进行。不过如何处理好同步与互斥是编写多线程程序的难点。
    • 但是多进程程序更健壮,多线程程序只要有一个线程死掉,整个进程也死掉了,而一个进程死掉并不会对另外一个进程造成影响,因为进程有自己独立的地址空间。

    9. TCP/IP协议的流量堵塞是如何处理的, 比如在四次挥手的时候,如果服务端没有发送ack给客户端,客户端该怎么处理

        https://www.cnblogs.com/liwei0526vip/p/14587300.html

    10. 排序的两种算法

          冒泡排序和快速排序

    11. 函数中值的传递有哪几种方法

         值传递:

         形参是实参的拷贝,改变形参的值并不会影响外部实参的值。从被调用函数的角度来说,值传递是单向的(实参->形参),参数的值只能传入,

         不能传出。当函数内部需要修改参数,并且不希望这个改变影响调用者时,采用值传递。

         指针传递:

         形参为指向实参地址的指针,当对形参的指向操作时,就相当于对实参本身进行的操作

         引用传递:

         形参相当于是实参的“别名”,对形参的操作其实就是对实参的操作,在引用传递过程中,被调函数的形式参数虽然也作为局部变量在栈

         中开辟了内存空间,但是这时存放的是由主调函数放进来的实参变量的地址。被调函数对形参的任何操作都被处理成间接寻址,即通过

         栈中存放的地址访问主调函数中的实参变量。正因为如此,被调函数对形参做的任何操作都影响了主调函数中的实参变量。

         见:C++ 值传递、指针传递、引用传递详解 

         引用的规则: 
      (1)引用被创建的同时必须被初始化(指针则可以在任何时候被初始化)。

      (2)不能有NULL引用,引用必须与合法的存储单元关联(指针则可以是NULL)。 

      (3)一旦引用被初始化,就不能改变引用的关系(指针则可以随时改变所指的对象)。 

    12. 串口通讯的参数

       串口通信最重要的参数是波特率、数据位、停止位和奇偶校验。对于两个进行通行的端口,这些参数必须匹配。

       各个参数的介绍:串口通信参数详解

    13. char ,指针, sizeof和strlen的用法

    strlen计算的是字符串到''位置的大小

    sizeof计算的字符串占的内存大小

    #include<stdio.h>
    #include<string.h>
    
    int main()
    {
        char str[100] = {0};
        strcpy(str, "abcd");
    
        int str_len = strlen(str);
        int str_size = sizeof(str);
    
        printf("strlen(str) = %d
    ", (str_len));  //4
        printf("sizeof(str) = %d
    ", (str_size)); //100
    
        return 0;
    }

    详细见:strlen和sizeof的区别

    大概只记得这些了, 红色的为算法题

  • 相关阅读:
    关于Ubuntu中passwd、shadow、group等文件
    Android colors.xml 颜色列表
    【设计】线框图、原型和视觉稿的区别
    【设计】24款线框图相关工具及资源大放送
    【辅助工具】20款优秀的移动产品原型和线框图设计工具(二)
    【辅助工具】20款优秀的移动产品原型和线框图设计工具(一)
    GET RESTful With Python
    VRRP、Track与NQA联动配置举例(Master监视上行链路)
    静态路由、Track与NQA联动配置举例
    ROS-MikroTik-RouterOS-培训认证各种证书
  • 原文地址:https://www.cnblogs.com/strive-sun/p/14456926.html
Copyright © 2011-2022 走看看