指针
用于存储值得地址。指针名表示的是地址。*运算符称为间接值或接触引用运算符,得到该地址处存储的值。
一般来说地址需要几个字节取决于计算机系统。
声明与初始化
1 int *ptr;//c风格 2 int* ptr;//c++风格,强调*ptr是一个int类型的值
*两边的空格是可选的。
c++中,int*是一种复合类型,是指向int的指针。
声明中初始化
1 int higgens == 5; 2 int* ptr = &higgens;
一定要在对指针应用解除引用运算符*之前,将指针初始化为一个确定的,适当的地址。
强制类型转换为指针
要将数字值作为地址来使用,通过强制类型转换将数字转换为适当的地址类型:
1 int* ptr; 2 ptr = (int*) 0xB8000000;
使用new来分配内存
typename * pointer_name = new typename
告诉new需要为哪种数据类型分配内存,new将找到正确内存块,返回该内存块的地址。
c++中值为0的指针,被称为空指针 Null pointer。
使用delete释放内存
当需要内存是,使用new请求。使用完内存后,使用delete将其归还给内存池。
int* ptr = new int; ...... delete ptr;//释放ptr指向的内存,不删除指针ptr本身
只能用delete来释放使用new分配的内存,对空指针使用delete是合法的。
指针和数组
- 静态联编:编译时给数组分配内存;
- 动态联编:使用new,运行阶段需要时创建,不需要时不创建。
使用new创建动态数组:
int* psome = new int [10];//必须在类型后加上括号,表示元素数目 //new返回第一个元素的地址
当程序使用完new分配的内存时,使用delete来释放:
delete [] psome; //方括号告诉程序,释放整个数组 //如果使用new不带方括号,使用delete也不带,两者要匹配。
把指针当做数组名即:
*psome指向第一个元素的值,也可以是psome[0]
psome是数组第一个元素的地址,psome+1后就到了第二个元素的地址,这里增加的量就等于它指向的类型的字节。
如果给cout提供一个字符的地址,它将从该字符开始打印,知道遇到空字符为止。
用引号括起来的字符串像数组名一样,也是第一个元素的地址。