???? * 和 & 认识
假设有一个 int 类型的变量 a,pa 是指向它的指针,那么
*&a
和&*pa
分别是什么意思呢?
*&a
可以理解为*(&a)
,&a
表示取变量 a 的地址(等价于 pa),*(&a)
表示取这个地址上的数据(等价于 *pa),绕来绕去,又回到了原点,*&a
仍然等价于 a
&*pa
可以理解为&(*pa)
,*pa
表示取得 pa 指向的数据(等价于 a),&(*pa)
表示数据的地址(等价于 &a),所以&*pa
等价于 pa
???? 对解引用(*)认识
表示乘法,例如
int a = 3, b = 5, c; c = a * b;
这是最容易理解的。表示定义一个指针变量,以和普通变量区分开,例如
int a = 100; int *p = &a;
表示获取指针指向的数据,是一种间接操作,例如
int a, b, *p = &a; *p = 100; b = *p;
表示获取指针指向的数据,是一种间接操作。这里我来举出一个代码例子↓
运行结果????
这里大家可以好好思考下为什么,为什么运行结果是这样看看能不能说出来。这样你才能真正的掌握这些知识点。
???? " * & 的应用"
如下所示????
运行结果
三个 printf() 打印的值都是一样的(同样可以思考下这个是为什么)
???? 通过指针交换变量值
既然都看到这里了,那么我们就来尝试做一道题目吧,看看你是否掌握这些知识点了。
题目内容:用指针交换两个值。
运行结果????
交换前的值:a = 10, b = 20
交换后的值:a = 20, b = 10
对程序进行说明如下↓
swap()是用户定义的函数,它的作用是交换两个变量(a 和 b)的值。swap 函数的形参 pa、pb 是指针变量。程序运行时,先执行 main 函数,已知 a 和 b 的值。然后将 a 和 b的地址分别赋给指针变量 pa 和 pb,使 pa 指向 a,pb 指向 b
用图形表示如下如下↓
???? 指针变量的说明
指针变量可以进行某些运算,但其运算的种类是有限的。它只能进行赋值运算和部分算术运算符以及关系运算。
指针运算符如下↓
- 取地址运算符&: 取地址运算符&是单目运算符,其结合性为自右至左,其功能是取变量 的地址。
- 取内容运算符*: 取内容运算符*是单目运算符,其结合性为自右至左,用来表示指针变 量所指的变量。在*运算符之后跟的变量必须是指针变量。
需要注意的是指针运算符* 和指针变量说明中的指针说明符* 不是一回事。在指针变量说明中,“*”是类型说明符,表示其后的变量是指针类型。而表达式中出现的“*”则是一个运算符用以表示指针变量所指的变量。