指针(编程语言术语)

指针编程语言术语

指针,是C语言中的一个重要概念及其特点,也是掌握C语言比较困难的部分。指针也就是内存地址,指针变量是用来存放内存地址的变量,在同一CPU构架下,不同类型的指针变量所占用的存储单元长度是相同的,而存放数据的变量因数据的类型不同,所占用的存储空间长度也不同。有了指针以后,不仅可以对数据本身,也可以对存储数据的变量地址进行操作。指针描述了数据在内存中的位置,标示了一个占据存储空间的实体,在这一段空间起始位置的相对距离值。在 C/C++语言中,指针一般被认为是指针变量,指针变量的内容存储的是其指向的对象的首地址,指向的对象可以是变量(指针变量也是变量),数组,函数等占据存储空间的实体。

中文名

指针

外文名

pointer

英文名

pointer

类别

指示测量的数据的装置

适用范围

计算机

作用

通过它找到以它为地址的内存单元

地址与指针

指针相对于一个内存单元来说,指的是单元的地址,该单元的内容里面存放的是数据。在 C 语言中,允许用指针变量来存放指针,因此,一个指针变量的值就是某个内存单元的地址或称为某内存单元的指针。

指针变量及其定义

指针变量是存放一个内存地址的变量,不同于其他类型变量,它是专门用来存放内存地址的,也称为地址变量。定义指针变量的一般形式为:类型说明符*变量名。类型说明符表示指针变量所指向变量的数据类型;*表示这是一个指针变量;变量名表示定义的指针变量名,其值是一个地址,例如:char*p1;表示 p1 是一个指针变量,它的值是某个字符变量的地址。

指针变量与其指向的对象的关联

从示例代码打印结果可以看出,指针变量p存储的内容就是其所指向的变量i的地址。指针变量p本身也是一个变量,也需要占据存储空间(32位系统下占4个字节),同样也有地址。

指针使用注意事项及举例说明

不允许把一个数赋予指针变量

不允许把一个数赋予指针变量,故下面的赋值是错误的。例如:

分析:前面例子中定义了一个指针变量 pointer,但是不能直接把 200 赋值给指针变量 pointer。后面的例子中定义了一个整型变量 a,并赋初始值为 200,又定义了一个指针变量 pointer,这个变量指向整型数据,pointer 中只能用来存放整型变量的地址,而不能直接把整型变量a赋值给这个指针变量 pointer。所以可以把a的地址赋值给 pointer;应改成:

改变形参不代表改变实参

不能企图通过改变指针形参的值而使指针实参的值改变。例如下面是错误的:

字符串指针

字符串指针指向的是一个字符串,例如下面是错误的:

分析:string1 是一个指针变量,指向字符串 " I love China",指针变量 string1 存放的是这个字符串的首地址。所以输出的是一个字符串,应改写成 printf(“%s ”,string1);

调用函数指针

函数指针变量的调用,以下是错误的:

分析函数指针变量不能进行算术运算,这是与数组指针变量不同的。数组指针变量加减一个整数可使指针移动指向后面或前面的数组元素,而函数指针的移动是毫无意义的。函数调用中 “(*指针变量名)” 的两边的括号不可少,其中的 “ * ” 不应该理解为求值运算,在此处只是一种表示符号。要把 “ z=*pomax(x,y);” 改成 “ z=(*pomax)(x,y);”。

信息工程

C 语言,在 1972 年开发 Unix 操作系统时,丹尼斯里奇和肯汤姆逊设计了 C 语言。C 语言不完全是里奇突发奇想而来,他是在肯·汤普逊发明的 b 语言的基础上进行设计。把 C 语言作为程序员的编程工具是它设计的初衷,因此它的主要目标是成为一种有用的语言。作为面向过程抽象化的通用编程语言,C 语言在底层开发中得到了广泛的应用。C 语言可以进行简单地编译和处理低级内存,是一种高效的编程语言,它只产生少量的机器语言,可以在没有任何运行环境支持的情况下运行。函数是执行特定任务的独立程序代码单元。函数的结构和用法已经被 C 语言的语法规则定义了。函数在 C 语言中的细节略有不同。某些函数执行操作,如 printf( ) 的作用是将数据打印在屏幕上显示出来,而一些函数则查找直接程序以供使用,如 strlen( ),向程序返回指定字符串的长度。

指向函数的指针

程序编译后,每个函数都有执行第一条指令的地址即首地址,称为函数指针。函数指针即指向函数的指针变量,要间接调用函数可以使用指针变量来实现。int (*pf)(int, int);通过将 pf 与括号中的 “ * ” 强制组合组合在一起,表示定义的 pf 是一个指针,然后与下面的 “ ( ) ” 再次组合,表示的是该指针指向一个函数,括号里表示为 int 类型的参数,最后与前面的 int 组合,此处 int 表示该函数的返回值。因此,pf 是指向函数的指针,该函数的返回值为 int。函数指针与返回指针的函数的含义大不相同。函数指针本身是一个指向函数的指针。指针函数本身是一个返回值为指针的函数。

float (*p)(float x, float y);定义了一个指向函数的指针变量。首先 c =(*p)(a,b);语句:因为指针 p 储存的是 max 函数的首地址,(*p)(a,b) 就相当于 max(a,b),函数返回较大值。其次 c = (*p)(a,b);语句:因为指针 p 储存的是 min 函数的首地址,(*p)(a,b) 也就相当于 min(a,b),函数返回较小值。

指针变量的初始化

通过赋值语句初始化指针变量

C 语言中指针初始化是指给所定的指针变量赋初值。

野指针

C 语言中指针初始化是指给所定义的指针变量赋初值。指针变量在被创建后,如果不被赋值,他的缺省值是随机的,它的指向是不明确的,这样的指针形象地称为 “ 野指针 ”。野指针是很危险的,容易造成程序出错,且程序本身无法判断指针指向是否合法。指针变量初始化时避免野指针的方法:可以在指针定义后,赋值 NULL 空值,也可写成如下形式:

p=0 或 p=''

这两种形式和 p = NULL 是等价的

上面两行代码的含义是,指针变量 p 被赋值为空。虽然定义了一个指针变量,但是它并不指向任何存储空间。

参考资料

1.指针转动,留下时间的故事·人民网

关键词:指针