常量指针数组

Ill*_*ist 6 c++

好的,我知道这是无效的

 char char_A = 'A';
    const char * myPtr = &char_A;
    *myPtr = 'J'; // error - can't change value of *myP
Run Code Online (Sandbox Code Playgroud)

[因为我们声明了一个指向常量字符的指针]

为什么这个有效?

 const char  *linuxDistro[6]={ "Debian", "Ubuntu", "OpenSuse", "Fedora", "Linux Mint", "Mandriva"};

for ( int i=0; i < 6; i++) 
cout << *(linuxDistro+i)<< endl;

*linuxDistro="WhyCanIchangeThis";// should result in an error but doesnt ? 
for ( int i=0; i < 6; i++) 
cout << *(linuxDistro+i)<< endl;
Run Code Online (Sandbox Code Playgroud)

谢谢你的期待!

小智 12

你写

*linuxDistro =  "WhyCanIchangeThis";
Run Code Online (Sandbox Code Playgroud)

这是完全有效的,因为声明linuxDistro

const char *linuxDistro[6];
Run Code Online (Sandbox Code Playgroud)

即它是一个由6个指针组成的数组const char.也就是说,您可以更改指针本身,而不是指针指向的字符.我,你不能编译

*linuxDistro[0] = 'B';
Run Code Online (Sandbox Code Playgroud)

获取字符串"Bebian",因为字符串包含常量字符...

你可能想要的是一个常量字符的常量指针数组:

const char *const linuxDistro[6];
Run Code Online (Sandbox Code Playgroud)