c 编程中的 * 和 & 运算符有啥区别?

Posted

技术标签:

【中文标题】c 编程中的 * 和 & 运算符有啥区别?【英文标题】:What is the difference between the * and the & operators in c programming?c 编程中的 * 和 & 运算符有什么区别? 【发布时间】:2011-02-11 17:30:03 【问题描述】:

我只是确保我正确理解了这个概念。使用 * 运算符,我创建了一个新变量,该变量在内存中分配了一个位置。为了避免不必要地重复变量及其值,& 运算符用于将值传递给方法等,它实际上指向变量的原始实例,而不是制作新副本……对吗?这显然是一种肤浅的理解,但我只是想确保我没有将它们混淆。谢谢!

【问题讨论】:

你确定你没有对使用 & 作为引用运算符以及地址运算符的 C++ 感到困惑吗? 可能的欺骗:***.com/questions/2667420 作为运算符,*& 是相反的,例如 ++--,或 +-*/ @outis:除非他们不是:A*B vs. A&B s/operators, /operators, unary/ 【参考方案1】:

不完全是。您将出现在类型名称(用于定义变量)中的 ** 运算符混淆了。

int main() 
    int i;    // i is an int
    int *p;   // this is a * in a type-name. It means p is a pointer-to-int
    p = &i;   // use & operator to get a pointer to i, assign that to p.
    *p = 3;   // use * operator to "dereference" p, meaning 3 is assigned to i.

【讨论】:

这些:*i&p 有什么意义吗?【参考方案2】:

使用& 来查找变量的地址。所以如果你有:

int x = 42;

并且(例如)计算机已将x 存储在地址位置5&x 将是5。同样,您可以将该地址存储到一个名为指针的变量中:

int* pointer_to_x = &x; // pointer_to_x has value 5

一旦有了指针,您就可以取消引用它,使用* 运算符将它转换回它所指向的类型:

int y = *pointer_to_x; // y is assigned the value found at address "pointer_to_x"
                       // which is the address of x. x has value 42, so y will be 42.

【讨论】:

【参考方案3】:

当一个变量与 * 运算符配对时,该变量保存一个内存地址。

当它与 & 运算符配对时,它返回保存变量的地址。

如果你有

int x = 5; //5 is located in memory at, for example, 0xbffff804
int *y = &x; //&x is the same thing as 0xbffff804, so y now points to that address

x*y 都会产生 5

【讨论】:

以上是关于c 编程中的 * 和 & 运算符有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

JS中的“&&”与“&”和“”“”有啥区别?

清华大学出版社《c语言从入门到精通实例版》 和《 c语言从入门到精通》 内容上有啥区别?

使用'&&'和'||'有啥区别通过三元运算符('?'和':')?

Oracle Sql中的“!=”和“<>”有啥区别吗?

Perl 的 ( or, and ) 和 ( ||, && ) 短路运算符有啥区别?

C语言中的一个等号和两个等号有啥区别