- 作者:zhaozj
- 发表时间:2020-12-23 11:03
- 来源:未知
文字来源 VC世界--C语言教室
自我存档,也献给和我一样的DElphi程序员
指针是C语言中广泛使用的一种数据类型。 能象汇编语言一样处理内存地址,从而编出精练而高效的程序。 根据内存单元的编号或地址就可以找到所需的内存单元,所以通常也把这个地址称为指针。 内存单元的指针和内存单元的内容是两个不同的概念。 可以用一个通俗的例子来说明它们之间的关系。 对于一个内存单元来说,单元的地址即为指针, 其中存放的数据才是该单元的内容。 严格地说,一个指针是一个地址, 是一个常量。 而一个指针变量却可以被赋予不同的指针值,是变量。 但在常把指针变量简称为指针。为了避免混淆,我们中约定:“指针”是指地址, 是常量, “指针变量”是指取值为地址的变量。 定义指针的目的是为了通过指针去访问内存单元。 因为数组或函数都是连续存放的。通过访问指针变量取得了数组或函数的首地址, 也就找到了该数组或函数。 只要该指针变量中赋予数组或函数的首地址即可。
指针变量的类型说明
对指针变量的类型说明包括三个内容:(1)指针类型说明,即定义变量为一个指针变量; (2)指针变量名;(3)变量值(指针)所指向的变量的数据类型。 其一般形式为: 类型说明符 *变量名; 其中,*表示这是一个指针变量,变量名即为定义的指针变量名,类型说明符表示本指针变量所指向的变量的数据类型。 例如: int *p1;表示p1是一个指针变量,它的值是某个整型变量的地址。 或者说p1指向一个整型变量。至于p1究竟指向哪一个整型变量, 应由向p1赋予的地址来决定。 再如:staic int *p2; /*p2是指向静态整型变量的指针变量*/float *p3; /*p3是指向浮点变量的指针变量*/char *p4; /*p4是指向字符变量的指针变量*/ 应该注意的是,一个指针变量只能指向同类型的变量,如P3 只能指向浮点变量,不能时而指向一个浮点变量, 时而又指向一个字符变量。
指针变量的赋值
指针变量必须赋予具体的值。未经赋值的指针变量不能使用。 指针变量的赋值只能赋予地址, 决不能赋予任何其它数据。 C语言中提供了地址运算符&来表示变量的地址。其一般形式为: & 变量名; 如&a变示变量a的地址,&b表示变量b的地址。 变量本身必须预先说明。设有指向整型变量的指针变量p,如要把整型变量a 的地址赋予p可以有以下两种方式:(1)指针变量初始化的方法 int a;int *p=&a;(2)赋值语句的方法 int a;int *p;p=&a;不允许把一个数赋予指针变量,故下面的赋值是错误的: int *p;p=1000; 被赋值的指针变量前不能再加“*”说明符,如写为*p=&a 也是错误的