声明指向数组的指针 - 访问问题
Declaration of pointer to an array - access issue
这个网站上最接近的问题,我有几个答案不让我满意。
基本上,我有两个相关的问题:
问。如果我做这样的事情:
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.
但
char *a="abcde";
a[0]='z'; //run-time error.
有什么区别?没有"const"声明,所以我应该可以自由更改内容,对吧?
问。如果我做这样的事情:
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.
这给了我一个编译时错误,我不明白为什么。
另一方面,这有效:
int *i=new int[3];
i[0]=10; i[1]=20; i[2]=30;
cout<<*++i; //Prints 20.
感谢您的帮助。
Q
char *a="abcde";
a[0]='z'; //run-time error.
Ans - 这里a
指向存储在只读位置的字符串文字。不能修改字符串文本
问
int i[3];
i[0]=10; i[1]=20; i[2]=30;
cout<<*++i;
答:数组和指针不是一回事。这里i
不是指针。增量操作数需要左值
你可以做:
int *p = &i[0];
std::cout<<*++p;
在最后一种情况下,运算符 new
返回指向分配的内存空间的指针,因此这是可能的。
问题 1
问题是它仍然是恒定的。
字符串文本实际上具有 .
的类型char const*
但是当他们设计C++03时,他们决定(不幸的是)从char const*
到char*
的转换不是错误。因此,代码:
char *a="abcde";
实际上编译没有错误(即使字符串是 const)。但是字符串文字仍然是一个常量,即使它通过非常量指针指向。从而使它非常危险。
好消息是,大多数编译器都会生成警告:
警告:已弃用从字符串常量到"char*"的转换
问题2
cout<<*++i; //'i' is a pointer to i[0], so I'm incrementing it and want to print 20.
在这一点上,我不是指针。它的类型仍然是一个数组.
递增数组不是有效的操作。
正在考虑的事情是数组在帽子掉落时衰减为指针(就像你将它们传递给函数时一样)。不幸的是,在这种情况下不会发生这种情况,因此您正在尝试增加数组(这没有意义)。
相关文章:
- 从其他类访问类时遇到问题
- 0xC0000005:访问冲突读取位置 0x00000000. 重载 == 运算符的问题
- 初学者问题:如何访问此变量?
- 在C++中循环访问自定义结构列表的小问题
- 从资源视图访问对话框时出现问题
- 在 c++ 中创建和访问 4D 向量时出现问题
- 我遇到了一个糟糕的访问问题
- reinterpret_cast,只读访问,简单的可复制类型,会出什么问题?
- 指向结构的指针的 2D 数组.内存访问问题
- C 矢量内存访问问题
- 类成员变量的C++线程访问问题
- 迭代器无法正确访问问题
- 声明指向数组的指针 - 访问问题
- Microsoft访问问题
- 链表自制类哭诉内存访问问题(C++)
- (C++)双链接列表模板-访问问题
- 链接列表头节点标识符/指针访问问题
- 内存访问问题
- c++继承和成员访问问题
- 虚拟机和内存访问问题