7. 指针的运算

前面我们已经学过了指针的解引用运算。这一小节我们学习指针的其它常用运算。

指针的运算有:

  1. 指针解引用
  2. 赋值运算
  3. 算术运算
  4. 关系运算
  5. 取地址运算

7.1 指针的赋值运算

使用 赋值运算符(=)对一个指针变量赋值是改变指针的指向。赋值运算符是改变变量的值,但对于指针来讲,它的值就代表指针的指向,因此对指针赋值就是改变指针的指向。

语法:

指针 = 表达式

说明

  1. 表达式的返回的类型最好和指针的类型相匹配,如果类型不匹配可能会引发隐式类型转换或编译器报警告(Warning)或错误(Error)。
  2. 两个指针的值相同。说明两个指针指向的地址相同,如果两个指针的类型也相同,则这两个指针解引用操作是操作同一块内存。

示例:

// filename: pointer_assignment.c
#include <stdio.h>

int main(int argc, char *argv[]) {
    int x = 100;
    int *p1, *p2;
    p1 = &x;  // 将 x 的地址赋值给 p1,则 p1 指向 x 变量
    p2 = p1;  // 将 p1 的值赋值给 p2,p2 也指向 x 变量

    *p1 = 200;
    printf("x:%d, *p1:%d, *p2:%d\n", x, *p1, *p2);
    *p2 = 300;
    printf("x:%d, *p1:%d, *p2:%d\n", x, *p1, *p2);

    return 0;
}

运行结果

weimingze@mzstudio:~$ gcc -o pointer_assignment pointer_assignment.c
weimingze@mzstudio:~$ ./pointer_assignment
x:200, *p1:200, *p2:200
x:300, *p1:300, *p2:300

从运行结果可以看出。赋值语句将两个指针指向了同一个变量 x,用两个指针解引用都可以操作这个变量 x 的值。

实验

练习改写上述程序。