C语言指针的运算

  • 内容
  • 评论
  • 相关

本文讨论使用指针进行的运算,最重要的运算是获取指针所引用的对象或函数。也可以比较指针,使用指针来遍历一个内存区域。

使用指针读取与修改对象

间接运算符 * 生成内存中的位置,该位置的地址存储在一个指针中。如果 ptr 是一个指针,那么 *ptr 就是 ptr 所指向的对象(或函数)。

使用间接运算符有时候被称为解引用(dereferencing)一个指针。指针指向的内存位置被认为存储有一个对象,指针的类型决定了该对象的类型。例如,当用 int 指针获取一个特定内存位置,读出或写入的也是 int 类型的对象。

与乘法运算符 * 不同,间接运算符 * 是一元运算符,也就是说,间接运算符只有一个操作数。在例 1 中,ptr 指向变量 x。因此,表达式 *ptr 等效于变量 x 本身。

【例1】解引用一个指针

double x, y, *ptr;    // 两个double变量和一个double指针
ptr = &x;                   // 使得ptr指向x
*ptr = 7.8;             // 对变量x赋值7.8
*ptr *= 2.5;            // 将x乘以2.5
y = *ptr + 0.5;                 // 将加法x+0.5的结果赋值给y

不要混淆指针声明中的星号(*)和间接运算符。声明中的语法可以被视为展示了如何使用指针。如下例所示:

double *ptr;

如上述声明,ptr 具有 double* 类型(读为:“指向double的指针”)。因此,表达式 *ptr 类型是 double。

当然,间接运算符 * 必须匹配一个具有有效地址的指针。这个用法要求在编写程序时需要特别小心!例 1 中,如果没有 ptr=&x 为 ptr 分配有效地址,那么所有包含 *ptr 的语句都是没有意义的(解引用一个没有定义的指针),有可能会造成程序崩溃。

一个指针变量,其本身也是内存中的一个对象,也就是说,其他指针可以指向该指针。若想创建指针的指针,必须使用两个星号,如下例所示:

char c = 'A', *cPtr = &c, **cPtrPtr = &cPtr;

表达式 *cPtrPtr 当前生成 char 指针 cPtr,而 **cPtrPtr 的值是 char 变量 c。图 1 展示了这样的关系。


图1

本文标题:C语言指针的运算

本文地址:http://www.hosteonscn.com/2774.html

评论

0条评论

发表评论

邮箱地址不会被公开。 必填项已用*标注