简体   繁体   中英

What is the difference between these statements in C?

I'm new in C. What is the difference between these:

a = b;

and

*a = *b;

(Assume both are integer pointers.)

Both are similar in that both statements assigns the value on the right-hand side to the left-hand side.

With

a = b;

you make a point to the same place where b is pointing. You now have two pointers to the same location.

For example, lets say we have the following setup:

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

Then if you do

a = b;

both a and b will be pointing to the variable y .


With

*a = *b;

(assuming both a and b are pointing somewhere valid) you assign the value of where b is pointing to where a is pointing.

If you understand arrays, it might be easier to see the last assignment as

a[0] = b[0];

It's doing exactly the same thing as *a = *b .

Taking the same example as above:

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

Then after

*a = *b;

the value of x and y will be the same, and it will be 20 .

First let's assume the following declarations:

int x = 1;
int y = 2;
int *a = &x;
int *b = &y;

After this, all of the following are true:

 a == &x       // int * == int *
*a ==  x == 1  // int   == int   == int
 b == &y       // int * == int *
*b ==  y == 2  // int   == int   == int

After a = b , then the following are true:

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

We have assigned the value of b to a , so now a and b both point to y .

If instead you had written *a = *b , then we would have

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

Instead of pointing a to y , we have assigned the value of the object that b points to ( y ) into the object that a points to ( x ), so now both x and y have the value 2 .

I would check the following guide out as it pretty much answers your question:

What are the differences between a pointer variable and a reference variable in C++?

Actually there are no difference in a=b and *a= *b.Both are same.Here a and b is point different element.

When you write the statement:

*a=*b

That means that the value of pointing element of b is assigned in a. And when you write this statement:

a=b

that means address of an element which is contain by b is now assigned in a. So those are same.

Here the code for better understanding:

#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;

}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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