"C++学习问题集锦更新中"
在C++编程语言的学习过程中,经常会遇到各种问题和陷阱。以下是一些关键的知识点总结:
1. **字符串长度与数组长度**:
- `a.length()` 用于获取C++中的`std::string`类型的字符串长度。
- 对于普通数组,如`int a[]`,其长度可以通过`sizeof(a)/sizeof(a[0])`计算得出。
2. **指针和常量**:
- 指针定义可以指向常量类型,如`int *p = &a`,意味着`p`可以改变但不能通过`p`修改`a`的值。
- 指针可以指向数组类型,例如`int *p = arr`,这里的`arr`是数组的首地址。
3. **指针操作**:
- `*p`表示解引用操作,即获取指针所指向的值。
- `&p`获取指针本身的地址,即指针变量的内存位置。
- `**p`是双重解引用,用于获取指针指向的指针所指向的值。
4. **预处理器宏#define**:
- 定义宏时,不应该在末尾添加分号,因为宏展开后可能产生语句,而语句应该以分号结尾。
5. **文件包含**:
- C++中,一个源文件不能包含另一个源文件的多次引用,以防头文件被重复包含。
6. **控制台操作**:
- `system("pause")`暂停程序执行,等待用户按下任意键继续。
- `system("cls")`清除控制台屏幕。
- `endl`除了换行外,还会刷新输出缓冲区。
7. **内存管理**:
- `delete p`后,应设置`p = NULL`避免野指针,因为`delete`后指针并不自动设为NULL,而是变为不确定的值。
- 删除动态数组使用`delete[] arr`。
8. **引用**:
- 引用是已存在变量的别名,如`int &alias = original`,`alias`和`original`共享同一块内存,修改一处影响另一处。
9. **内存区域**:
- **代码区**:存储函数的机器指令。
- **全局/静态区**:存放全局变量、静态变量和常量,程序结束时自动释放。
- **栈区**:存放函数参数和局部变量,由编译器自动分配和释放。
- **堆区**:程序员手动分配和释放,未释放则由操作系统在程序结束时回收。
10. **引用作为函数返回值**:
- 函数可以返回一个引用,如`int &test() { static int a = 10; return a; }`,这允许直接对返回值进行赋值操作。
11. **常量引用**:
- 常量引用`const int &v`防止在函数内部修改传入的参数值,如`void showValue(const int &v)`。
12. **结构体与类**:
- 结构体默认所有成员都是公有的,而类默认所有成员是私有的。
- 访问结构体或类的成员使用`.`操作符,如`object.member`。
13. **构造函数**:
- 类`Person`中的默认构造函数`Person() {}`用于创建对象时不提供初始值的情况。
了解并掌握这些C++的基础知识点对于深入学习和编写C++程序至关重要。持续学习和实践可以帮助你更好地理解和运用这些概念。