I have this code:
#include <iostream>
int main(){
int v1 = 20;
int *p1 = &v1;
int **p2 = &p1;
return 0;
}
What I want to do here is pointing a pointer to another pointer, and it works fine in this case.
I make p1 to a const
pointer OR a pointer to a const
:
int *const p1 = &v1; OR
const int *p1 = &v1;
Now my code does not work.
Considering the first case. int *const p1 = &v1;
.
Here is my updated code, which I think should be right:
#include <iostream>
int main(){
int v1 = 20;
int *const p1 = &v1;
const int **p2 = &p1;
return 0;
}
Making the pointer itself const
means that it cannot point to another object, but the value of that object which it was pointing can be changed. So if I want to point another pointer to the previous pointer p1
, I need to make sure that this second pointer cannot be used to change the value of p1
So I make it (p2
) a pointer to a const
. But it does not work.
Error: : invalid conversion from 'int* const*' to 'const int**' [-fpermissive]
Similarly, the second case fails too. My code which I think should be right:
#include <iostream>
int main(){
int v1 = 20;
const int *p1 = &v1;
int **p2 = &p1;
return 0;
}
Making a pointer point to a const means that the pointer cannot be used to change the value of the object which it was pointing to. However, the pointer can change it's own value, that is it can point to other objects. Since I can change the value of the pointer, the second pointer need not to be pointing to a const.
Error: invalid conversion from 'const int**' to 'int**' [-fpermissive]
I am using the GNU CC Compiler
I am new to C++ and I am lost. I would like to know how to point pointers to other pointer which are involved with const
.
Your first rewrite did not work, because you tried to assign an address of a constant pointer to a pointer-to-pointer where the final "pointee" (i.e. the int
) is constant, rather than the pointer in the middle. In other words, if C allowed this
int *const p1 = &v1;
const int **p2 = &p1; // Not allowed
it should allow this:
*p2 = &v2; // This would be legal.
However, this would have modified the pointer p1
, which is allegedly constant.
Here is what you need to change for the first rewrite to work:
int *const p1 = &v1;
int * const *p2 = &p1;
Note how const
is moved from before the declaration to between the asterisks. Now you are making a pointer to a constant pointer to int.
Your second rewrite fails because it drops const
-ness altogether. To fix it, put const
back at the beginning of the declaration:
const int *p1 = &v1;
const int **p2 = &p1;
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With