面试准备之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++基础知识的主要内容,如果未能解决你的问题,请参考以下文章