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 neededconst
是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.