[英]What is the difference between these statements in C?
我是 C 的新人。这些有什么区别:
a = b;
和
*a = *b;
(假设两者都是 integer 指针。)
两者的相似之处在于,这两个语句都将右侧的值分配给左侧。
和
a = b;
你把a
点指向b
指向的同一个地方。 您现在有两个指向同一位置的指针。
例如,假设我们有以下设置:
int x = 10;
int y = 20;
int *a = &x; // Make a point to the variable x
int *b = &y; // Make b point to the variable y
那么如果你这样做
a = b;
a
和b
都将指向变量y
。
和
*a = *b;
(假设a
和b
都指向有效的地方)您将b
指向的位置的值分配给a
指向的位置。
如果您了解 arrays,则可能更容易将最后一个作业视为
a[0] = b[0];
它做的事情与*a = *b
完全相同。
还是拿上面的例子来说:
int x = 10;
int y = 20;
int *a = &x; // Make a point to the variable x
int *b = &y; // Make b point to the variable y
然后
*a = *b;
x
和y
的值相同,均为20
。
首先让我们假设以下声明:
int x = 1;
int y = 2;
int *a = &x;
int *b = &y;
在此之后,以下所有内容都为真:
a == &x // int * == int *
*a == x == 1 // int == int == int
b == &y // int * == int *
*b == y == 2 // int == int == int
在a = b
之后,以下内容为真:
a == &y
*a == y == 2
b == &y
*b == y == 2
我们已经将b
的值赋给a
,所以现在a
和b
都指向y
。
相反,如果你写*a = *b
,那么我们会有
a == &x
*a == x == 2
b == &y
*b == y == 2
我们没有将a
指向y
,而是将b
指向( y
) 的 object 的值分配给a
指向 ( x
) 的 object,因此现在x
和y
的值都为2
。
我会查看以下指南,因为它几乎可以回答您的问题:
实际上 a=b 和 *a= *b 没有区别。两者是相同的。这里 a 和 b 是点不同的元素。
当你写声明时:
*a=*b
也就是说b的指向元素的值赋值给了a。 当你写这个声明时:
a=b
这意味着 b 包含的元素的地址现在分配给 a。 所以那些是一样的。
这里的代码可以更好地理解:
#include<iostream>
using namespace std;
int main()
{
int x=10,y=20;
int *a,*b;
a=&x;
b=&y;
a=b;
cout<<*a<<" "<<*b<<endl;
a=&x;
b=&y;//for change the value of a and b we assign again
cout<<*a<<" "<<*b<<endl;
*a = *b;
cout<<*a<<" "<<*b<<endl;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.