const char single pointer
In this section, you are going to learn
What is
const char a = 5;?What is
char const a = 5;?What is
const char *p = &a;?What is
char const *p = &a;?What is
char *const p = &a;?What is
const char *const p = &a;?
Inorder to answer above questions, let us remember a very simple rule
Anything after
constkeyword CAN NOT be changed
Is it that simple ?
Yes. Let us see how do we apply above rule to answer the questions
Step 1 : Consider the statement
const char a = 5;
Step 2 : Remove all keywords after
const
const a = 5;
Step 3 : Remove everything before
const
const a = 5;
Step 4 : Remove assignment
const a;
Step 5 : Now apply the rule. Anything after
constkeyword CAN NOT be changed
We see
aafterconstMeans, variable
aCAN NOT be changed again in next line
const char a = 5;
a = 10; // --> This is invalid
Step 1 : Consider the statement
const char *p = &a;
Step 2 : Remove all keywords after
const
const *p = &a;
Step 3 : Remove everything before const
const *p = &a;
Step 4 : Remove assignment
const *p;
Step 5 : Now apply the rule. Anything after
constkeyword CAN NOT be changed
We see
*pafterconstMeans,
*pCAN NOT be changed again in next line
char a = 5;
const char *p = &a;
*p = 10; // --> This is invalid
Step 6 : Bonus point !
*pandpare different. Means you can changepFrom Step 4, we derived that “const *p”
Means only
*pis const and CAN NOT be changedBut remember
pis entirely differentThere is nothing which says
pis constantHence
pcan still be changedSee below example
char a = 5, b = 6;
const char *p = &a;
printf("*p is %d\n", *p); // prints 5
p = &b; // --> This is valid
printf("*p is %d\n", *p); // prints 6
Step 1 : Consider the statement
char *const p = &a;
Step 2 : Remove all keywords after
const
char *const p = &a;
Step 3 : Remove everything before const
const p = &a;
Step 4 : Remove assignment
const p;
Step 5 : Now apply the rule. Anything after
constkeyword CAN NOT be changed
We see
pafterconstMeans,
pCAN NOT be changed again in next line
char a = 5, b = 6;
char *const p = &a;
printf("*p is %d\n", *p); // prints 5
p = &b; // --> This is invalid
Step 6 : Bonus point !
*pandpare different. Means you can change*pFrom Step 4, we derived that “const p”
Means only
pis const and CAN NOT be changedBut remember
*pis entirely differentThere is nothing which says
*pis constantHence
*pcan still be changedSee below example
char a = 5, b = 6;
char *const p = &a;
printf("*p is %d\n", *p); // prints 5
*p = 100; // --> This is valid
printf("*p is %d\n", *p); // prints 100
There are two occurences of
constkeywordHence, let us apply the same rules two times
Step 1 : Consider the statement
const char *const p = &a;
Step 2 : Remove all keywords after first const
const *p = &a;
Step 3 : Remove everything before first const
const *p = &a;
Step 4 : Remove assignment
const *p;
Step 5 : Now apply the rule. Anything after const keyword CAN NOT be changed
*p CAN NOT be changed
Step 1 : Consider the statement
const char *const p = &a;
Step 2 : Remove all keywords after second const
const char *const p = &a;
Step 3 : Remove everything before second const
const p = &a;
Step 4 : Remove assignment
const p;
Step 5 : Now apply the rule. Anything after const keyword CAN NOT be changed
p CAN NOT be changed
Both p and *p CAN NOT be changed
char a = 5, b = 6;
const char *const p = &a;
*p = 100; // --> This is invalid
p = &b; // --> This is invalid
Statement |
Meaning |
|---|---|
const char a = 5; |
|
char const a = 5; |
|
const char *p = &a; |
|
char const *p = &a; |
|
char *const p = &a; |
|
const char *const p = &a; |
|
Current Module
Previous Module
Next Module
Other Modules