1、小心对待数组后面的元素的地址:
在计算机上,地址是由两部分组成:第一部分是指向某一块内存的起始点的指针(基地址);第二部分是相对于这块内存起点的地址偏移量。这种结构被称为段地址结构
。
如果一个数组放在了基地址的位置,就没有数组前面的元素这种说法了;同理,如果数组放在该内存的最后的位置上,数组后地址就没有意义了。
2、数组作为参数:
当把数组作为函数的参数时,没有办法在程序运行时通过数组参数本身来获得该数组的大小,因为函数的数组参数相当于指向该数组第一个元素的指针。
3、常量指针和指针常量:
(1)const char * p;
(2)char * const p=a;
语句1定义了一个常量指针,即指向一个常量的指针,指向的内容是常量,不可修改。但是指针本身是可以修改的,指针可以指向不同的地址;语句2定义了一个指针常量,即指针本身是一个常量,但是指针指向的内容是可以修改的。
指针常量和常量指针可以通过const
和*
的位置来判断,当const
在*
之前时,就是常量指针;当const
在*
之后,就是指针常量。
注意:
①、如果指针常量指向的是字符串变量,那么当修改*p时,原则上可以修改,在编译时能通过,但是运行时不能通过,因为它试图修改常量区的内容,显示是非法的;
②、当指针常量指向另一个指针A时,当指针A指向别的内容时,指针常量还是指向原先的内容。
4、函数指针与指针函数:
①、函数指针:指向函数的指针,定义为:数据类型 (*fun)(参数列表);
;
②、指针函数:返回值为指针的函数,定义为:数据类型*fun(参数列表);
。