new 和 malloc的区别:
new是 C++ 中的操作符,而malloc是 C 语言中的函数。
new在分配内存的同时会调用对象的构造函数进行初始化,而malloc只是简朴地分配一块指定大小的内存空间。
new返回的是对象类型的指针,而malloc返回的是void*类型的指针,必要进行显式的类型转换。
new抛出异常(如 std::bad_alloc)来处理内存分配失败的情况,而malloc在内存分配失败时返回空指针(NULL)。
2.malloc的底层实现:
malloc函数的底层实现会根据详细的操作系统和编译器而有所不同。通常,它会使用操作系统提供的堆管理机制来分配所需的内存空间。一样平常情况下,malloc调用了系统调用(如 brk或 sbrk)来扩展进程的堆空间,然后将分配到的内存块返回给调用者。
3.指针与引用的相同和区别;怎样相互转换?
相同点:
指针和引用都可以用于访问变量或对象。
指针和引用都可以作为函数参数通报,允许对传入的变量进行修改。
区别:
指针可以为空(NULL),但引用必须始终引用一个已存在的对象。
指针可以被重新赋值指向其他对象,而引用一旦绑定到一个对象后就无法改变其引用目的。
引用在声明时必须进行初始化,而且不能有空引用。
指针转换为引用:可以使用解引用操作符 *将指针转换为引用,例如 int& ref = ptr;。
引用转换为指针:可以使用取地址操作符 &将引用转换为指针,例如 int ptr = &ref;。
C 语言检索内存情况,内存分配的方式:
在 C 语言中,可以使用 malloc 和 free 函数进办法态内存分配和开释。别的,还可以使用栈上分配的局部变量(自动变量)和全局变量(静态变量)来进行内存分配。可以通过调试工具或编写代码来查抄内存的使用情况和泄漏问题。
5.extern "C"的作用:
extern "C"是 C++ 中的语言特性,用于指定以 C 语言的方式进行函数名重载和链接。当 C++ 代码与 C 代码进行肴杂编译时,可以使用 extern “C” 来告诉编译器将某段代码按照 C 语言的规则进行处理,避免了 C++ 的名称修饰和函数重载导致的链接错误。
8.memcpy()函数需注意,strcat strncat strcmp strcpy哪些函数会导致内存溢出
确保源地址和目的地址的有效性,避免越界访问。
考虑内存重叠情况,确保拷贝的正确性。
strcat如果目的字符串的空间不敷以容纳源字符串,可能导致缓冲区溢出。
strncat如果指定的拼接长度凌驾目的字符串的剩余空间,可能导致缓冲区溢出。
strcmp如果比力的字符串没有以空字符结尾,可能导致访问非法内存。
strcpy如果源字符串没有以空字符结尾,可能导致访问非法内存。
9.char和int之间的转换
在 C 语言中,可以使用字符型变量和整型变量之间的隐式类型转换。将一个字符赋值给整型变量时,会将字符的 ASCII 值作为整数赋给该变量。将一个整型值赋值给字符型变量时,会将整数的低位字节(如果符合字符范围)作为字符赋给该变量。
显式转换可以通过欺压类型转换实现。例如,将字符型转换为整型:int num = (int)ch;,将整型转换为字符型:char ch = (char)num;
8.static的用法(定义和用途)static静态变量,只初始化一次
static关键字在 C 语言中有多种用法和含义: