
在C语言中,允许用一个变量来存放指针,这种变量称为指针变量。因此,一个指针变量的值就是某个内存单元的地址或称为某内存单元的指针。 图中,设有字符变量C,其内容为“K”(ASCII码为十进制数 75),C占用了011A号单元(地址用十六进数表示)。设有指针变量P,内容为011A,这种情况我们称为P指向变量C,或说P是指向变量C的指针。
为了表示指针变量和它所指向的变量之间的关系,在程序中用“*”符号表示“指向”,例如,i_pointer代表指针变量,而*i_pointer是i_pointer所指向的变量。 下两语句作用相同: i=3; *i_pointer=3; 第二个语句的含义是将3赋给指针变量i_pointer所指向的变量。
(1) 指针类型说明,即定义变量为一个指针变量; (2) 指针变量名; (3) 变量值(指针)所指向的变量的数据类型其一般形式为: 类型说明符 *变量名; 其中,*表示这是一个指针变量,变量名即为定义的指针变量名,类型说明符表示本指针变量所指向的变量的数据类型。
例如: int *p1; 表示p1是一个指针变量,它的值是某个整型变量的地址。或者说p1指向一个整型变量。至于p1究竟指向哪一个整型变量,应由向p1赋予的地址来决定。 再如: int *p2; /*p2是指向整型变量的指针变量*/ float *p3; /*p3是指向浮点变量的指针变量*/ char *p4; /*p4是指向字符变量的指针变量*/ 应该注意的是,一个指针变量只能指向同类型的变量,如P3 只能指向浮点变量,不能时而指向一个浮点变量,时而又指向一个字符变量。
现把全部指针运算列出如下: 1) 指针变量加(减)一个整数: 例如:p++、p--、p+i、p-i、p+=i、p-=I 一个指针变量加(减)一个整数并不是简单地将原值加(减)一个整数,而是将该指针变量的原值(是一个地址)和它指向的变量所占用的内存单元字节数加(减)。 P++ —— P指向下一个元素 *p++ = *(p++) —— 先取*P,后使P加1 *(++p) —— 先使P自加,再取*P (*p)++ —— P所指向的元素值加1
2) 指针变量赋值:将一个变量的地址赋给一个指针变量。 p=&a; (将变量a的地址赋给p) p=array; (将数组array的首地址赋给p) p=&array[i]; (将数组array第i个元素的地址赋给p) p=max; (max为已定义的函数,将max的入口地 址赋给p) p1=p2; (p1和p2都是指针变量,将p2的值赋给p1) 注意:不能如此:p=1000;
3) 指针变量可以有空值,即该指针变量不指向任何变量:p=NULL; 4) 两个指针变量可以相减:如果两个指针变量指向同一个数组的元素,则两个指针变量值之差是两个指针之间的元素个数。 5) 两个指针变量比较:如果两个指针变量指向同一个数组的元素,则两个指针变量可以进行比较。指向前面的元素的指针变量“小于” 指向后面的元素的指针变量。 6) void指针类型 ANSI新标准增加了一种“void”指针类型,即可以定义一个指针变量,但不指定它是指向哪一种类型数据。
============ 欢迎各位老板打赏~ ===========

