面试准备之C/C++基础知识

Posted jxlutech

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面试准备之C/C++基础知识相关的知识,希望对你有一定的参考价值。

1.值传递、地址传递和引用传递

(1)值传递

仅传递参数的值,函数内操作的是形参,不对实参进行操作,

函数声明:

void swap(int px,int py)

      int tmp = px;
      px = py;
      py = tmp;             
函数调用:
int a,b;
swap(a,b);

(2)地址传递

地址传递,传递的是地址,函数内部的操作会改变实参。

函数声明:

void swap(int *px,int *py)

      int tmp = *px;
     * px =* py;
      *py = tmp;             

函数调用:

int a,b;
swap2(&a, &b);

(3)引用传递

引用是变量的别名,传递的是地址,函数内部的操作会改变实参。

函数声明:

void swap(int px,int py)

      int tmp = px;
      px = py;
      py = tmp;             

函数调用:

int a,b;
swap2(a, b);

2.指针和引用

引用是对象的别名,不能为空,定义一个引用的时候,必须初始化

引用是不能改变的指针,更安全,

3.const int *p和int * const p的区别

(1)const int *p

称作常量指针,以*作为分割边界,const在左,则表示指针所指数据是常量。

*p是常量,不能将*p作为左值进行操作,

(2)int * const p

称作指针常量,表示该指针本身是常量,

p是常量。

4.C里内存的五个分区

(1)栈

需要的时候分配,不需要的时候自动清除的变量储存区,存放局部变量和函数

(2)堆

new分配的内存块,和delete相对应

(3)自由储存区

malloc分配的内存区,和堆很相似

(4)全局/静态变量储存区

全局和静态变量储存区

(5)常量储存区

常量储存区

这里重点区别一下堆和自由储存区,自由存储是C++中通过new与delete动态分配和释放对象的抽象概念,而堆是C语言和操作系统的术语,是操作系统维护的一块动态分配内存。

5.C++中类里static成员变量与普通的成员变量有什么不同?静态函数呢? 

(1)成员变量

static成员变量无论你创建多少个对象就只有唯一的变量,只分配一次地址。
普通成员变量你创建一个对象就有一个副本。

(2)函数

属于类不属于对象。

不用定义对象可以调用,但是只能调用静态成员。

静态的成员函数不能访问类中的非静态成员。

6. TCP跟UDP的区别

(1)连接

TCP连接,三次握手,

UDP不用连接,用于广播,

(2)安全

TCP数据可靠安全

UDP不保证可靠

(3)传输效率

TCP传输效率相对较低。

UDP传输效率高,适用于对高速传输和实时性有较高的通信或广播通信。

(4)连接对象数量

TCP连接只能是点到点、一对一的。

UDP支持一对一,一对多,多对一和多对多的交互通信。

 7.函数memcpy 、memset的实现,手撕代码

操作的都是字节,这一点很重要

(1)memcpy

memcpy用于资源内存(src指向的内存)拷贝到目标内存(desc指向的内存)

void *Mem_copy(void *dst,const void *src, int n)

    if (dst == NULL || src == NULL || n < 1)
        return NULL;
    char *Dst = (char *)dst;
    char *Src = (char *)src;
    while (n > 0)
    
        *Dst++ = *Src++;
        n--;
    
    return dst;

(2)memset

memset都是字节操作,这是重点,它是对较大的结构体或数组进行清零操作的一种最快方法.

void *Mem_set(void *dst, int val, int n)

    if (dst == NULL || n < 1)
        return NULL;
    char *Dst = (char *)dst;
    while (n > 0)
    
        *Dst++ = val;
        n--;
    
    return dst;

未完待续。。。

以上是关于面试准备之C/C++基础知识的主要内容,如果未能解决你的问题,请参考以下文章

C++基础知识点集合

C++基础知识点集合

C++编程 之 CMake实践

面试题之基础C/C++问题整理

面试题之基础C/C++问题整理

重温C与C++之结构体大小计算