【发布时间】:2015-06-18 09:54:37
【问题描述】:
在下面的函数中,
void swap(int * a, int * b) {
int t;
t = *a; // = *a
*a = *b; // a* =
*b = t;
}
= *a 和 *a = 有什么区别?
我听说= *a 中的* 运算符是一个解引用(或间接)运算符,它从指针中获取(?)该值。
那么,*a =的真正含义是什么?
昨天,我问这个问题的那天,我向我的同事解释了指针,他的专业领域与指针无关。
我快速键入了这样的源代码。
#include <stdio.h>
void swap1(int a , int b) {
int t = a;
a = b;
b = t;
}
void swap2(int * a, int * b) {
int t = *a;
*a = *b;
*b = t;
}
int main(int argc, char * argv[]) {
int a = 10;
int b = 20;
swap1(a, b);
swap2(&a, &b);
}
我什至为自己能记住 1996 年印在我脑海中的事情而感到自豪。(我使用 Java 已经将近 20 年了。)
我用了一堆printfs 和%ds 和%ps 来向她展示发生了什么。
然后我犯了一个可怕的错误。我声明。
포인터 변수 앞에 별을 붙이면 값을 가져온다는 뜻이에요。
当您在指针变量前面附加 STAR 时,这意味着您获取(检索)该值。
这可以应用于以下语句。
int t = *a;
简单地说,
int t = 10;
我面临的最大问题来自第二个陈述。
*a = *b; // 10 = 20?
问题的根源在于我没有尝试解释 dereference operator 或者我没有要求自己意识到 a 的含义별(明星)。
这是人们会说的。
对于
= *a,实际值将
a表示的地址分配给左侧。为
*a =右侧的值存储在
a表示的地址中。
这就是我感到困惑的地方。这就是为什么我应该重新思考“去引用”的含义。
感谢您的回答。
哦,我认为这个问题要深入到lvalues 和rvalues 的概念上。
【问题讨论】:
-
Binky 的时间又到了:cslibrary.stanford.edu/104
标签: c pointers dereference lvalue rvalue