&
用来取得其 *** 作数的地址。如果 *** 作数 x 的类型为 T,则表达式 &x 的类型是 T 类型指针(指向 T 的指针)。取址运算符的 *** 作数必须是在内存中可寻址到的地址。换句话说,该运算符只能用于函数或对象(例如左值),而不可以用于位字段,以及那些还未被存储类修饰符 register 声明的内容。
当需要初始化指针,以指向某些对象或函数时,需要获得这些对象或函数的地址:
float x,*ptr;ptr = &x; // 合法:使得指针ptr指向xptr = &(x+1); // 错误: (x+1) 不是一个左值相反地,当已具有一个指针,并且希望获取它所引用的对象时,使用间接运算符 *(indirection operator),有时候这会被称为解引用运算符(dereferencing operator)。它的 *** 作数必须是指针类型。如果 ptr 是指针,那么 *ptr 就是 ptr 所指向的对象或函数。如果 ptr 是一个对象指针,那么 *ptr 就是一个左值,可以把它(即 *ptr)当作赋值运算符左边的 *** 作数:
float x,*ptr = &x;*ptr = 1.7; // 将1.7赋值给变量x++(*ptr); // 并将变量x的值加1在这个示例最后的语句中,ptr 的值保持不变,但 x 的值变成 2.7。
如果指针 *** 作数的值不是某个对象或函数的地址,则间接运算符*的 *** 作结果无法确定。
像其他一元 *** 作数一样,运算符 & 和 * 具有很高的优先级。 *** 作数的组合方式是从右到左。因此,表达式 ++(*ptr)中的括号是没有必要的。
运算符 & 和 * 是互补的:如果 x 是一个表达式,用于指定一个对象或一个函数,那么表达式 *&x 就等于 x。相反地,在形如 &*ptr 的表达式中,这些运算符会互相抵消,表达式的类型与值等效于 ptr。然而,不管 ptr 是不是左值,&*ptr 都一定不会是左值。 总结
以上是内存溢出为你收集整理的C语言*运算符和&运算符全部内容,希望文章能够帮你解决C语言*运算符和&运算符所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)