初识指针
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; // 整个数组的地址