9、指针、数组和指针算术

9、指针、数组和指针算术

  指针和数组基本等价的原因在于指针算术和C++内部处理数组方式类似。首先我们来看一看算术,将整数变量加一后,其值增加1;但是指针变量加1后,增加的量等于他指向的类型的字节数,将指向double的指针加1后,如果系统对double使用8个字节存储,则数值将增加8;将指向short的指针加1,如果系统对short使用2个字节存储,则指针 将会增加2.

2、数组的地址;

  对数组,数组名也不会被解释为其地址,数组名别解释为其第一个元素的地址,而对数组名应用地址运算符是,得到的是整个数组的地址:

short tell[10];     //tell是一个20bit的数组
cout <<tell<<endl;   //显示&tell[0]的地址
cout <<&tell<<endl; //显示整个数组的地址

  从数字上说两个地址相同;但从概念上说,&tell[0](即tell)是一个两个字节的内存块的地址,而&tell是有个20字节内存块的地址。因此,表达式tell+1将地址值加2,而表达式&tell+1将地址加20.换句话说,tell是一个short指针(*short),而&tell是一个这样的指针,即指向包含20个元素的short的数组(short(8)[20]).

3、指针小结:

  1.指针声明

typeName * pointerName;
//例子
double * pn;
char * pc;
//其中pn和pc 都是指针,而double*和char*都是指向double的指针和指向char的指针。

  2.给指针赋值

    应将内存地址赋值给指针。可以对变量应用& 运算符,来获得被命名的内存=地址,new运算符返回未命名的内存地址。

double * pn;
double * pa;
char * pc;
double bubble = 3.2;
pn  = &bubble;
pc = new char;
pa = new double[30];

  3、对指针解除引用;

    对指针解除引用意味着获得指针指向的值,对指针应用解除引用或间接值运输符(*)来解除引用。因此,如果先上面的例子中的那样,pn是指向bubble的指针,则*pn是指向的值即3.2.

cout << *pn; //打印bubble的值
*pc = 'S';//给*PC赋值

  4、数组名:

    在多数情况下,C++将数组名视为数组的第一个元素的地址。一种例外情况是,将sizeof运算符用于数组名时,此时经返回整个数组的长度(单位位置字节)。

  5、指针算术

    C++允许将指针和整数相加,加1 的结果等于原来的地址加上指向对象占用的总字节数。

  8、数组表示法和指针表示法;

    使用方括号数组表示法等同于对指针解除引用;因此对于指针和数组名,既可以使用指针表示法,也可以使用数组表示法。

int * pt = new int [10];
*pt  = 5;
pt[10] = 6;
pt[9] = 44;
int coats[10];
*(coats +4)= 12;

猜你喜欢

转载自www.cnblogs.com/wanshuai/p/9101547.html
今日推荐