繁体   English   中英

C中这些语句有什么区别?

[英]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;

ab都将指向变量y


*a = *b;

(假设ab都指向有效的地方)您将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;

xy的值相同,均为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 ,所以现在ab都指向y

相反,如果你写*a = *b ,那么我们会有

 a == &x
*a ==  x == 2
 b == &y       
*b ==  y == 2  

我们没有将a指向y ,而是将b指向( y ) 的 object 的值分配给a指向 ( x ) 的 object,因此现在xy的值都为2

我会查看以下指南,因为它几乎可以回答您的问题:

C++中指针变量和引用变量有什么区别?

实际上 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM