7. 指针的运算
前面我们已经学过了指针的解引用运算。这一小节我们学习指针的其它常用运算。
指针的运算有:
- 指针解引用
- 赋值运算
- 算术运算
- 关系运算
- 取地址运算
7.1 指针的赋值运算
使用 赋值运算符(=)对一个指针变量赋值是改变指针的指向。赋值运算符是改变变量的值,但对于指针来讲,它的值就代表指针的指向,因此对指针赋值就是改变指针的指向。
语法:
指针 = 表达式
说明
- 表达式的返回的类型最好和指针的类型相匹配,如果类型不匹配可能会引发隐式类型转换或编译器报警告(
Warning)或错误(Error)。 - 两个指针的值相同。说明两个指针指向的地址相同,如果两个指针的类型也相同,则这两个指针解引用操作是操作同一块内存。
示例:
// 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 的值。
实验
练习改写上述程序。