-1

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

a = b;

and

*a = *b;

(Assume both are integer pointers.)

halfer
  • 19,824
  • 17
  • 99
  • 186
  • Maybe I'm confused, but it looks like the second uses pointers (and the first does not). Where are you getting that both are pointers? –  May 11 '20 at 22:30

4 Answers4

3

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.

Some programmer dude
  • 400,186
  • 35
  • 402
  • 621
1

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.

John Bode
  • 119,563
  • 19
  • 122
  • 198
0

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++?

0

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;

}
halfer
  • 19,824
  • 17
  • 99
  • 186
Shakib hasan
  • 93
  • 1
  • 7