const char * a [4];我可以更改[]值吗?

时间:2015-07-29 17:48:36

标签: c++ const

我认为const char * a [4]意味着[]的元素是const,因此我无法在初始化后更改它。但是,以下代码向我显示它们可以更改。我很困惑......这里的const是什么?

#incldue<iostream>  
#include<string>
    using namespace std;
    int main()
    {
            int order=1;
            for(int i=1; i<10;++i,++order){
                    const char* a[2];
                    int b = 10;
    //              a[0] = to_string(order).c_str();
                    a[0] = "hello world";
                    a[1] = to_string(b).c_str();
                    cout << a[0] << endl;
                    cout << a[1] << endl;
                    cout << "**************" << endl;
                    a[0] = "hello" ;
                    cout << a[0] << endl;
            }
    }

3 个答案:

答案 0 :(得分:5)

const限定符以非常直观的方式应用。所以我们有:

1)指向可变内容的两个指针的可变数组:char* a[2]

a[0] = nullptr; //Ok
a[0][0] = 'C'; //Ok

2)指向不可变内容的两个指针的可变数组:const char* a[2]

a[0] = nullptr; //Ok
a[0][0] = 'C'; //Error

3)指向可变内容的两个指针的不可变数组:char* const a[2]

a[0] = nullptr; //Error
a[0][0] = 'C'; //Ok

4)指向不可变内容的两个指针的不可变数组:const char* const a[2]

a[0] = nullptr; //Error
a[0][0] = 'C'; //Error

注意,如果 3 4 a需要初始化程序(因为const变量无法更改)。例如:

const char* const a[2] =
{
    ptr1,
    ptr2
};

答案 1 :(得分:3)

您正在声明一个指向const char的2指针数组。你可以改变指针(使它们指向不同的东西),但你不能改变他们指向的内存。所以你可以做到

a[0] = "hello world";

但是你无法将&#34;你好&#34;稍后再做

a[0][0] = 'H';

答案 2 :(得分:1)

const char *a[4] with the combination priority. ^^^^^^^^^^1 ^^^^^^^^^^^^^^^^2

这意味着你有4个char指针室,每个都可以指向一个char数组。 “const”限定符指定您只能读取但不能修改。

例如:

char str1[] = "hello"

char str2[] = "good"

const char *ptr = str1;

cout << ptr << endl; // is correct for read

*(ptr + 1) = "a"; // it will alert an error by the compiler, you can't modify

ptr = st2; // is correct, point to another char array(or string)

cout << ptr << endl;