What is the difference between char * const and const char *?

前端 未结 19 1474
执笔经年
执笔经年 2020-11-22 03:31

What\'s the difference between:

char * const 

and

const char *
19条回答
  •  無奈伤痛
    2020-11-22 03:44

    // Some more complex constant variable/pointer declaration.
    // Observing cases when we get error and warning would help
    // understanding it better.
    
    int main(void)
    {
      char ca1[10]= "aaaa"; // char array 1
      char ca2[10]= "bbbb"; // char array 2
    
      char *pca1= ca1;
      char *pca2= ca2;
    
      char const *ccs= pca1;
      char * const csc= pca2;
      ccs[1]='m';  // Bad - error: assignment of read-only location ‘*(ccs + 1u)’
      ccs= csc;    // Good
    
      csc[1]='n';  // Good
      csc= ccs;    // Bad - error: assignment of read-only variable ‘csc’
    
      char const **ccss= &ccs;     // Good
      char const **ccss1= &csc;    // Bad - warning: initialization from incompatible pointer type
    
      char * const *cscs= &csc;    // Good
      char * const *cscs1= &ccs;   // Bad - warning: initialization from incompatible pointer type
    
      char ** const cssc=   &pca1; // Good
      char ** const cssc1=  &ccs;  // Bad - warning: initialization from incompatible pointer type
      char ** const cssc2=  &csc;  // Bad - warning: initialization discards ‘const’
                                   //                qualifier from pointer target type
    
      *ccss[1]= 'x'; // Bad - error: assignment of read-only location ‘**(ccss + 8u)’
      *ccss= ccs;    // Good
      *ccss= csc;    // Good
      ccss= ccss1;   // Good
      ccss= cscs;    // Bad - warning: assignment from incompatible pointer type
    
      *cscs[1]= 'y'; // Good
      *cscs= ccs;    // Bad - error: assignment of read-only location ‘*cscs’
      *cscs= csc;    // Bad - error: assignment of read-only location ‘*cscs’
      cscs= cscs1;   // Good
      cscs= cssc;    // Good
    
      *cssc[1]= 'z'; // Good
      *cssc= ccs;    // Bad - warning: assignment discards ‘const’
                     //                qualifier from pointer target type
      *cssc= csc;    // Good
      *cssc= pca2;   // Good
      cssc= ccss;    // Bad - error: assignment of read-only variable ‘cssc’
      cssc= cscs;    // Bad - error: assignment of read-only variable ‘cssc’
      cssc= cssc1;   // Bad - error: assignment of read-only variable ‘cssc’
    }
    

提交回复
热议问题