为什么这个c ++代码不会出现const的错误

时间:2016-05-21 11:08:03

标签: c++ const

char* s1 = new char[30];
char s2[] = "is not";
const char* s3 = "likes";
s3 = "allows";
strcpy( s2, s3 );
sprintf( s1, "%s %s %s using functions.", "C++", s2, "fast code" );
printf( "String was : %s\n", s1 );
delete[] s1;

我对

感到困惑
const char* s3 = "likes";
s3 = "allows";

因为我认为s3是一个const,所以它不能改变。但是,当s3 = "allows"有效时。为什么呢?

1 个答案:

答案 0 :(得分:5)

  

我认为s3是一个const

不,s3不是const本身,它是指向const的指针,因此s3 = "allows";很好,*s3 = 'n';会失败。

如果你的意思是const指针,char* const s3const char* const s3都是const指针,那么s3 = "allows";就会失败。

摘要(请注意const)的位置

char* s3是指向非const的非const指针,s3 = "allows";*s3 = 'n';都可以。
const char* s3是指向const的非const指针,s3 = "allows";很好,*s3 = 'n';失败 char* const s3是指向非const的const指针,s3 = "allows";失败,*s3 = 'n';没问题 const char* const s3是指向const的const指针,s3 = "allows";*s3 = 'n';都将失败。

请参阅Constness of pointer