`*a =` 和 `= *a` 有什么区别?
What is the difference between `*a =` and `= *a`?
在下面的函数中,
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 年。)
我用了一堆 printf
s 和 %d
s 和 %p
s 来告诉她发生了什么。
然后我犯了一个可怕的错误。我声明.
포인터 변수 앞에 별을 붙이면 값을 가져온다는 뜻이에요.
When you attach a STAR in front of a pointer variable, that means you fetches(retrieves) the value.
嗯,这可以应用于以下语句。
int t = *a;
可以简单地说,
int t = 10;
我面临的最大问题来自第二个陈述。
*a = *b; // 10 = 20?
罪魁祸首是我没有尝试解释 dereference operator 或者我没有问我自己意识到 별(star).
的含义
这是人们会说的。
for = *a
,
the actual value at the address denoted by a
is assigned to the left side.
for *a =
the value of the right side is stored in the address denoted by a
.
这就是我感到困惑的地方。这就是为什么我应该重新考虑“取消引用”的含义。
感谢您的回答。
哦,我认为这个问题更深入到 lvalue
s 和 rvalue
s 的概念。
这里:
t = *a;
指针 a
被取消引用,这个值被分配给 t
而这里:
*a = *b;
b
和 a
都被取消引用并且 *b
的值存储在地址 a
.
第一个正在从 a
指向的内存中读取。第二个正在写入该内存。
这与 x =
和 = x
没有区别,只是您不直接访问变量而是访问它指向的对象。
它与'='运算符无关。它(*运算符)只是表示'a'处的值address.So
t = *a; assigns value at address a to t
*a = *b; assigns b's value in place of value at address a
*b = t; assigns t to b's value
a
这里是一个指针,指向一个int。
*a
检索存储在 a
指向的内存中的整数值。当您说 *a = <some value>
时,假设 <some value>
是 int
,<some value>
存储在 a
.
指向的内存位置
*a = *b
==> 这里 b 又是一个 int 指针,所以 b
指向的整数值被读取并写入 a
指向的内存位置。
I've heard that the * operator in = *a is a de-referencing(or in-directing) operator which fetches(?)
事实上,当您单独使用运算符 *
取消引用指针时,就会发生提取。因此,赋值 =
运算符不涉及取消引用,可能会将取消引用的值分配给 LHS。
What is the difference between = *a and *a =?
嗯...看看这段代码:
int x;
t = x;
x = t;
如果你有任何普通变量 int x;
那么你可以从它读取和写入它。这也是你的两条线之间的区别。
*
是 "contents of" 运算符。如果 a
是指向 int
的指针,那么 *a
只是意味着您可以使用该变量的内容,就好像它是一个普通的 int 变量一样。就像您可以读取或写入的任何变量一样。
在下面的函数中,
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 年。)
我用了一堆 printf
s 和 %d
s 和 %p
s 来告诉她发生了什么。
然后我犯了一个可怕的错误。我声明.
포인터 변수 앞에 별을 붙이면 값을 가져온다는 뜻이에요.
When you attach a STAR in front of a pointer variable, that means you fetches(retrieves) the value.
嗯,这可以应用于以下语句。
int t = *a;
可以简单地说,
int t = 10;
我面临的最大问题来自第二个陈述。
*a = *b; // 10 = 20?
罪魁祸首是我没有尝试解释 dereference operator 或者我没有问我自己意识到 별(star).
的含义这是人们会说的。
for
= *a
,the actual value at the address denoted by
a
is assigned to the left side.for
*a =
the value of the right side is stored in the address denoted by
a
.
这就是我感到困惑的地方。这就是为什么我应该重新考虑“取消引用”的含义。
感谢您的回答。
哦,我认为这个问题更深入到 lvalue
s 和 rvalue
s 的概念。
这里:
t = *a;
指针 a
被取消引用,这个值被分配给 t
而这里:
*a = *b;
b
和 a
都被取消引用并且 *b
的值存储在地址 a
.
第一个正在从 a
指向的内存中读取。第二个正在写入该内存。
这与 x =
和 = x
没有区别,只是您不直接访问变量而是访问它指向的对象。
它与'='运算符无关。它(*运算符)只是表示'a'处的值address.So
t = *a; assigns value at address a to t
*a = *b; assigns b's value in place of value at address a
*b = t; assigns t to b's value
a
这里是一个指针,指向一个int。
*a
检索存储在 a
指向的内存中的整数值。当您说 *a = <some value>
时,假设 <some value>
是 int
,<some value>
存储在 a
.
*a = *b
==> 这里 b 又是一个 int 指针,所以 b
指向的整数值被读取并写入 a
指向的内存位置。
I've heard that the * operator in = *a is a de-referencing(or in-directing) operator which fetches(?)
事实上,当您单独使用运算符 *
取消引用指针时,就会发生提取。因此,赋值 =
运算符不涉及取消引用,可能会将取消引用的值分配给 LHS。
What is the difference between = *a and *a =?
嗯...看看这段代码:
int x;
t = x;
x = t;
如果你有任何普通变量 int x;
那么你可以从它读取和写入它。这也是你的两条线之间的区别。
*
是 "contents of" 运算符。如果 a
是指向 int
的指针,那么 *a
只是意味着您可以使用该变量的内容,就好像它是一个普通的 int 变量一样。就像您可以读取或写入的任何变量一样。