Home > Net >  Why can I not assign an address of a 1 star pointer to another without type casting?
Why can I not assign an address of a 1 star pointer to another without type casting?

Time:09-12

I just wonder why ptr and p1 have the same type uint8_t but this code below warning that "assignment from incompatible type"

uint8_t *ptr=NULL;
uint8_t *p1=NULL;
ptr=&p1;

but when I type cast p1 from uint8_t to uint8_t that warning disappears

uint8_t *ptr =NULL;
uint8_t *p1=NULL;
ptr=(uint8_t*)&p1;

please help me I'm stuck on that issue for so long

CodePudding user response:

You have declared two variables, both of the same type: uint8_t *. This means they are both supposed to hold addresses of uint8_t objects. Since both variables are of the same type you can assign one to the other:

ptr = p1;  // Valid

However, the & operator messes things up. p1 is already a pointer, so it is supposed to hold the address of a uint8_t. But &p1 creates a pointer to p1, i.e. a pointer-to-a-pointer to a uint8_t. &p1 has type uint8_t ** (notice the second *). It is supposed to hold the address of the address of a uint8_t.

therefore, there is a type mismatch. ptr holds a uint8_t *; &p1 holds a uint8_t **.

Removing the ampersand will fix this.

CodePudding user response:

You're assigning a uint8_t ** to a uint8_t *. Fix the issue by removing the ampersand:

uint8_t *ptr=NULL;
uint8_t *p1=NULL;
ptr=p1;
  •  Tags:  
  • c
  • Related