上传者: lizhiming183
|
上传时间: 2025-10-19 23:45:15
|
文件大小: 122KB
|
文件类型: DOC
sizeof指针和数组的长度
Sizeof与Strlen的区别
stack和heap的区别
大小端存储情况
strcut的指针p+0x200=? (long)p+0x200=? (long *)p+ox200=?
数组地址偏移算法
const用法
static作用
volatile作用
线程间通信的机制
在C语言中,`sizeof`和`strlen`是两个经常使用的操作符和函数,它们各自有不同的用途和特性。`sizeof`用于获取一个类型或者变量在内存中占据的字节数,而`strlen`则用于计算以空字符'\0'结尾的字符串的实际长度。
1. `sizeof`操作符:
- `sizeof`返回的是一个表达式或类型的字节数。例如,对于一个整型变量`int n`,`sizeof(n)`会返回4(在32位系统中)。
- 对于数组,`sizeof`会返回整个数组的大小,即使数组作为函数参数传递,也不会退化为指针,因此`sizeof(str1)`将返回字符数组`str1`的总字节数,包括结束符'\0'。
- 对于指针,`sizeof`返回的是指针本身的大小,通常为4字节(32位系统)或8字节(64位系统),如`sizeof(p1)`。
- `sizeof`可以在编译时计算,因此它可以应用于类型,如`sizeof(int)`或未初始化的数组声明,如`sizeof(char[20])`。
2. `strlen`函数:
- `strlen`是一个函数,需要一个以'\0'结尾的字符串作为参数,返回字符串的长度,不包括结束符'\0'。
- `strlen`在运行时计算字符串长度,因此`strlen(str1)`会返回5,表示不包括'\0'的字符个数。
- 与`sizeof`不同,`strlen`不能用于非字符串的数组或非字符类型的指针,因为它们不会自动添加'\0'。
3. 栈和堆的区别:
- 栈(Stack):栈内存由编译器自动管理,用于存储函数参数、局部变量等。栈内存的分配和释放快速,但空间有限,通常只有几MB。
- 堆(Heap):堆内存由程序员手动管理,使用`malloc`、`calloc`、`realloc`和`free`等函数进行分配和释放。堆内存可以按需分配大块内存,但操作相对较慢,并且容易产生内存泄漏。
在面试中,对这些基本概念的理解是至关重要的,它们涵盖了C语言内存管理的基础知识。了解这些可以帮助开发者避免常见的编程错误,如栈溢出、内存泄漏和指针操作不当等问题。此外,面试中可能会涉及大小端存储问题,这关乎到数据在内存中的存储顺序,以及跨平台编程时的数据交换。`struct`的指针偏移涉及到结构体成员的内存布局,而`const`、`static`和`volatile`关键字则是C语言中用于控制变量特性的关键字,分别用于常量、内部链接和易变性。线程间通信的机制则涉及到多线程编程,可能包括信号量、管道、消息队列、共享内存等方式。理解这些知识点对于编写高效、可靠的多线程程序至关重要。