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.
网友评论