1.C++新手在指定结构成员时,搞不清楚何时应使用句点运算符,何时应使用箭头运算符。如果结构标识符是结构名,则使用句点运算符,如果标识符是指向结构的指针,则使用箭头运算符。
2.输出char *类型的指针指向的字符数组的地址:
cout << name << " at " << (int *)name << "\n" ;
3.C++管理数据内存的方式:
(1)自动存储:
在函数内部定义的常规变量使用自动存储空间,被称为自动变量,这意味着它们在所属的函数被调用时自动产生,在该函数结束时消亡。实际上,自动变量是一个局部变量,其作用域为包含它的代码块。代码块是被包含在花括号中的一段代码。函数内也可以有代码块。如果在其中的某个代码块定义了一个变量,则该变量仅在程序执行该代码块中的代码时存在。
自动变量通常存储在栈中。这意味着执行代码块时,其中的变量将依次加入到栈中,而在离开代码块时,将按相反的顺序释放这些变量,这被称为后进先出(LIFO)。
(2)静态存储
使变量成为静态的方式有两种:一种是在函数外面定义它,另一种是在变量声明时使用关键字static
(3)动态存储
new和delete运算符管理了一个内存池,这在C++中被称为自由存储空间或堆。该内存池同用于静态变量和自动变量的内存是分开的。new和delete让您能够在一个函数中分配内存,而在另一个函数中释放它。因此,数据的生命周期不完全受程序或函数的生存时间控制。
4.关键字auto:
C++ 11新增了一个工具,让编译器能够根据初始值的类型推断变量的类型。为此,它重新定义了auto的含义。在初始化声明中,如果使用关键字auto,而不指定变量的类型,编译器将把变量的类型设置成与初始值相同。
auto n = 100 ;
auto x = 1.5 ;
auto y = 1.3e12L ;
5.模板类vector:
vector类似于string类,也是一种动态数组,它也用new和delete来管理内存,不过这些工作都自动完成。
vector使用案例如下:
#include <iostream>
#include <vector>
using namespace std ;int main()
{vector<int> vi ;int n ;cin >> n ;vector<double> vd(n) ;for(int i=0; i<n; i++) cout << "vd[" << i << "] = " << vd[i] << endl ;
}
运行结果:
9
vd[0] = 0
vd[1] = 0
vd[2] = 0
vd[3] = 0
vd[4] = 0
vd[5] = 0
vd[6] = 0
vd[7] = 0
vd[8] = 0