成因

优点

申请空间、释放空间相对于动态数组更加容易

缺点

获取链表中的元素写法相比数组更加复杂难搞
需要专门的迭代器进行获取

nullptrNULL 的使用

  1. 在 C 语言中我们并没有 nullptr 的指针,这是 cpp 的新增特性。
  2. 在编译器看来,NULLnullptr 在事实上都是 0 ,也就是说,我们可以通过 if(ptr) 来判断一个指针是不是 nullptr
  3. 我们可以通过 cout 来获得这些 nullptr 指针的指向内容,代码如下:
1
2
3
4
5
6
int *a = nullptr;
std::cout<<a<<std::endl; // 这里显示是 0
std::cout<<*a<<std::endl; // 这是不被允许的,会显示 segmentation fault (core dumped)
*a = 0; // 编译器会报错
char *p = NULL;
std::cout<< (p == (char * )a) <<std::endl; // 这里显示是真,说明这里的地址指向同一块,是编译器确认的地址,用户无法访问,但是公用地址