C++ 指向数组的指针声明-访问问题

C++ 指向数组的指针声明-访问问题,c++,arrays,pointers,C++,Arrays,Pointers,这个网站上最近的一个问题是我有一些不满意的答案 基本上,我有两个相关问题: 问:如果我做了以下事情: char a[]= "abcde"; //created a string with 'a' as the array name/pointer to access it. a[0]='z'; //works and changes the first character to z. int i[3]; i[0]=10; i[1]=20; i[2]=30; cout<<*++i

这个网站上最近的一个问题是我有一些不满意的答案

基本上,我有两个相关问题:

问:如果我做了以下事情:

char a[]= "abcde"; //created a string with 'a' as the array name/pointer to access it.

a[0]='z';  //works and changes the first character to z.
int i[3];
i[0]=10; i[1]=20; i[2]=30;
cout<<*++i;  //'i' is a pointer to i[0], so I'm incrementing it and want to print 20.
但是

有什么区别?没有“const”声明,所以我应该可以自由更改内容,对吗

问:如果我做了以下事情:

char a[]= "abcde"; //created a string with 'a' as the array name/pointer to access it.

a[0]='z';  //works and changes the first character to z.
int i[3];
i[0]=10; i[1]=20; i[2]=30;
cout<<*++i;  //'i' is a pointer to i[0], so I'm incrementing it and want to print 20.
inti[3];
i[0]=10;i[1]=20;i[2]=30;
coutQ

Ans-此处
a
指向存储在只读位置的字符串文本。不能修改字符串文字

Q

在最后一种情况下,运算符
new
返回一个指向已分配内存空间的指针,因此这是可能的。

问题1 问题是它仍然是常数

字符串文字实际上具有类型
char const*

但是当他们设计C++03时(不幸的是),他们决定从
char const*
char*
的转换不是一个错误。因此,守则:

char *a="abcde";
实际上编译时没有错误(即使字符串是常量)。但是字符串文字仍然是常量,即使它是通过非常量指针指向的。这样就很危险了

好消息是大多数编译器都会生成警告:

警告:已弃用从字符串常量到“char*”的转换

问题2
coutNot needed
const
是C++11中删除的一条特殊规则。这仍然不意味着它是可修改的。这个问题必须有数百个重复项…在第二个问题的后半部分中增加
i
后,您不再有可以传递到
delete[]
的指针。
int i[3];
i[0]=10; i[1]=20; i[2]=30;
cout<<*++i; 
int *p = &i[0];
std::cout<<*++p;
char *a="abcde";
cout<<*++i;  //'i' is a pointer to i[0], so I'm incrementing it and want to print 20.