指针基础
指针(pointer)这个概念有一点点抽象,大家很有可能在使用过程中被“ * ”这个解除引用操作符和“ & ”地址符的穿插使用搞混。记录一下自己的学习内容,方便理解。
首先引入一个代码块
int value = 1024;
int *p;
p = &value;
这样应该非常直观了,声明一个变量value并将其初始化为1024,声明一个int型指针p,将value对应的地址值赋给p。
在这个代码块中,*p = value; p = &value;
直接声明:
int valueB = 1024;
int *pb = &valueB;
Tips: int *pc == int* pc == int * pc; 间接引用:int number = *pc;
使用new分配内存
在运行阶段给未命名的内存分配储存值
typeName pointer_name = new typeName;
int pt = new int;
*pt = 1001;
内存使用完毕后需要使用delete来释放内存。(必须为创建时内存的状态,即增减后需要恢复为创建时的指针状态)
delete pt;
一定要配对使用new 与 delete,否则会发生内存泄漏(memory leak)。
使用new创建动态数组
int * ps = new int [20]; //通用格式: typeName pointer_name = new typeName [num_elements];
程序结束内存使用完毕后,同样需要delete来释放内存防止泄露。
delete [] ps; // 释放整个数组
使用动态数组
创建动态数组完毕就是使用它了,很简单,如下:
double *p3 = new double [3];
double[0] = 0.3;
double[1] = 0.6;
double[2] = 0.9;
在这里可以直接通过加减操作移动指针的位置。
p3 = p3 + 1;
这时指针会指向下一个元素的地址。