开发者

const char pointer assignments

开发者 https://www.devze.com 2023-04-12 05:00 出处:网络
Are the following assignments valid? Or wi开发者_如何学运维ll any of these create problems. Please suggest.

Are the following assignments valid? Or wi开发者_如何学运维ll any of these create problems. Please suggest.

const char * c1;  
const char * c2; 
const char * c3;
char * c4;

c2 = c1;
c2 = c3;
c2 = c4;

What if I do the following, is that ok thing to do?

const char * c5 = "xyz";
char * c6 = "abc";

c2 = c5;
c2 = c6;


In your mind draw a line through the asterik. To the left is what is being pointed to and to the right what type of pointer

For example

  1. const char * const p - The pointer p is constant and so are the characters that p points to - i.e. cannot change both the pointer and the contents to what p points to
  2. const char * p - p points to constant characters. You can change the value of p and get it to point to different constant characters. But whatever p points to, you cannot change the contents.
  3. char * const p - You are unable to change the pointer but can change the contents

and finally

  1. char * p - Everything is up for grabs

Hope that helps.


All are valid statements as along you don't dereference them because all the pointers are left uninitalized or aren't pointing to any valid memory locations.

And they are valid because pointer is not constant but the value pointed by the pointer is constant. So, pointers here are reassignable to point to a different location.


These assignments are all perfectly valid as I and others have explained in your recent run of near identical questions.

A const char* is a pointer to memory that cannot be modified using that pointer. Nothing here can circumvent that. The compiler would object if you assigned c4 = c1 since then that would circumvent the const.


All of these are valid, the only problematic line is char * c6 = "abc";: here "abc" is a const literal so assigning it to a non-const pointer is not safe, and should at least generate a warning if not a compile error (I did not try to compile it).

0

精彩评论

暂无评论...
验证码 换一张
取 消