C++ Primer Plus 学习笔记 第四章 02

来源:互联网 发布:免费cc顶级域名2016 编辑:程序博客网 时间:2024/06/02 19:32
声明:本文整理自《C++ Primer Plus》
100天之第三天
01 指针和自由存储空间
指针是一个变量,其存储的是值的地址,而不是值本身。
*运算符被称为间接值或解除引用运算符,放在指针前面,得到该地址处存储的值。
mainly是一个指针 ,mainly表示一个地址,*mainly表示存储在该地址处的值。

C++中,int*是一种复合类型,是指向int的指针。
double * tax_ptr;
char * str;
tax_ptr和str指向两种不同的数据类型,但两个的变量本身的长度是一样的,char的地址和double的地址的长度相同。

int higgens = 5;
int * pt = &higgens;
将pt的值设置为&higgens。
在对指针使用*之前,要将指针初始化为一个确定的适当的地址。

使用new获取内存
int * pn = new int;
new int告诉程序,需要适合存储int的内存,new找到内存并返回其地址,将地址赋给pn。
使用delete释放内存
int * ps = new int;
delete ps;//使用delete时,后面加上指向内存块的指针。

动态数组
int * psome = new int [10];//创建了一个包含10个int元素的数组。返回第一个元素的地址,赋给psome。
delete [] psome;//释放内存块。
把指针当做数组名来访问数组的元素,psome[0],psome[1]。
psome = psome + 1;//指针是变量,可以修改它的值,原来psome[0]指向的是数组的第一个值,现在指向的是数组的第二个值。

02 指针、数组和指针算术
C++将数组名解释为数组第1个元素的地址。
double * pw = wages;
wages = &wages[0];
将指针变量加1后,其增加的值等于指向的类型占用的字节。
wages[1]等价于*(wage+1),wages[2]等价于*(wage+2)

指针和数组的区别:
  • 可以修改指针的值,数组名是常量不可以修改
  • 对数组应用sizeof得到数组的长度,对指针则得到指针的长度
double wages[3];
double * pw = wages;
24 = size of wages array
4=size of pw pointer

对数组名应用地址运算符时,得到的是整个数组的地址。

在cout和多数C++表达式中,char数组名,char指针以及用引号括起来的字符串常量都被解释为字符串第一个字符的地址。
0 0
原创粉丝点击