初识指针

int higgens = 5;
int *pt = &higgens;

直接将指针初始化为变量的地址,然而变量是在编译时分配的内存,这种情况下,指针只是一个通过名称直接访问内存的别名,无法发挥出真正的力量。

指针的真正作用

指针的真正作用在于运行阶段时分配未命名的内存以及存储值。

int* pn = new int;

一个细节是指向 int 的指针的长度与指向 double 的指针相同,因为它们都是地址。使用 new 分配的内存必须使用 delete 来释放,不可释放两次,对空指针应用 delete 是安全的。

动态数组

  • 静态联编:在编译时给数组分配内存。
  • 动态联编:使用 new 在程序运行时需要数组创建,不需要不创建,这种数组被称为动态数组。
int* psome = new int [10];

psome 指向第一个元素的地址,使用完毕后通过 delete [] psome; 来释放。

可以直接通过下标进行访问数组中的值,psome[4] 就是数组中的第五个元素。

double* p = new double[3];
p[0] = 0.2;
p[1] = 0.5;
p[2] = 0.8;
p = p + 1; // 指向后一个元素
cout<<p[0]<<endl;// 0.5 此时是第二个元素

整数变量加 1,值将加 1。
指针变量加 1,增加的量是指向类型的字节数,如指向double的指针加 1,数值将增加 8。

数组的地址

int tell[10];
cout << tell << endl; // 等价于 &tell[0] 是数组第一个元素的地址
cout << &tell << endl; // 整个数组的地址