程序员

关于指针的一些记录

2017-09-22  本文已影响0人  星期八我一定好好读书

1、按变量的地址直接存取变量的方法,称为“直接访问”。存储该变量的内存空间的首地址称为该变量的地址。

2、如果将一个变量的地址放在另一个变量中,则存放地址的变量称为指针型变量。

此时存取变量,可以间接地由指针型变量取得该变量的地址,这称为“间接访问”的方式。

3、指针型变量的值也简称为指针,所以指针就是地址。

4、指针型变量的定义格式:类型 * 变量名。其中*是定义指针类型的说明符,而不是指针变量的一部分。

5、指针变量绝对不能任意赋一个内存地址,只能取一个已经分配了内存的变量的地址赋值给指针变量。

6、c++中,有两个专门的运算符与指针有关。

a. &:取地址符,运算结果不能作为左值。

b. *: 是间接引用运算符,作用于一个指针型变量,访问该指针所指向的内存数据。因为是内存中的可寻址数据,所以可以作为左值。

7、const修饰指针:

a. 指针常量:固定指向一个对象的指针,指针本身是常量,此时,const放中间。char * const ptr = &ch。ptr本身在初始化时的地址是不可变的,但它指向的目标ch的值是可以改变的。

b.  常量指针:指向“常量”的指针,即指针本身是可以改为指向别的对象,但不能通过该指针修改对象。即只能作为只读指针使用。此时,const放前面,const char * ptr = &ch。常量指针一般用于函数的参数,以免误改实参。

8、数组与指针的关系:数组名看作改数组的第一个元素在内存中的首地址。数组名是地址,当然也是指针,但数组名中存放的地址是不可以改变的,所以称为指针常量。

9、指针作为函数参数。将指针做为函数的参数时,传的仍然是值,即指针的值,这个值就是指针所指向元素的地址。

从物理上讲,传的是指针的值,与传其他变量没有区别,函数获得的是另一个变量的地址;

从逻辑上讲,是把另一个变量的地址传了过去,可以看作传地址。

函数中操作的对象不是指针本身,而是指针所指向的变量,与引用参数在本质上没有差别。

10、指针的“算术运算”与“关系运算”,只有指针指向数组或结构体元素的时候,这些运算才有意义,主要规则:

a.指针变量与整形变量n的加减表示移动指针

新指针的值 = 原指针 + n * sizeof(指针指向的数据类型)

b.只有当两个同类型的指针变量指向同一个数组时,才可以进行减法运算,表示从第一个指针到第二个指针元素之间的元素数量。第一个和第二个元素之间元素的个数是1,即原指针的地址值得差除以sizeof(元素类型)

c.只有当指向同一个数组时,才能用‘>' '==' '!='

注意:两个指针相加毫无意义

d.指针同样可以++,--运算,必须小心使用,注意优先级。

y = *p++   ==> y = *(p++)因为后++,所以y取值为*p, 而*p增加1后,指向下一个元素。

千万不要以为是p所指的目标元素的值加1.

上一篇 下一篇

猜你喜欢

热点阅读