C语言中指针的理解

*是用来做指针处理的。*L表示:L里面放了一个地址,*L则把这个地址的内容提出来。例:20H这个地址里面存了一个数5.而L则把20H这个地址存起来了。*L就等于5.而*&L而不同&是取地址的意思。&L就是把L的地址位置取出来。例于L在0X30位置。*&L的结果,相当于*(0X30)。这个时候,要看0X30里面的值是多少。然后把这个值做为指针,再把具体的数据取出来

 

 

相反地,当已具有一个指针,并且希望获取它所引用的对象时,使用间接运算符 *(indirection operator),有时候这会被称为解引用运算符(dereferencing operator)。它的操作数必须是指针类型。如果 ptr 是指针,那么 *ptr 就是 ptr 所指向的对象或函数。如果 ptr 是一个对象指针,那么 *ptr 就是一个左值,可以把它(即 *ptr)当作赋值运算符左边的操作数:

 

1 float x, *ptr = &x;
2 *ptr = 1.7;                                      // 将1.7赋值给变量x
3 ++(*ptr);                                        // 并将变量x的值加1

 

 

 

  在这个示例最后的语句中,ptr 的值保持不变,但 x 的值变成 2.7。

如果指针操作数的值不是某个对象或函数的地址,则间接运算符*的操作结果无法确定。

像其他一元操作数一样,运算符 & 和 * 具有很高的优先级。操作数的组合方式是从右到左。因此,表达式 ++(*ptr)中的括号是没有必要的。

运算符 & 和 * 是互补的:如果 x 是一个表达式,用于指定一个对象或一个函数,那么表达式 *&x 就等于 x。相反地,在形如 &*ptr 的表达式中,这些运算符会互相抵消,表达式的类型与值等效于 ptr。然而,不管 ptr 是不是左值,&*ptr 都一定不会是左值。

(以上转自http://c.biancheng.net/view/291.html

posted @ 2020-10-01 22:55  仲侣有二  阅读(305)  评论(0)    收藏  举报