指针数组中的意外结果
unexpected results in array of pointer
我写了简单的代码,但我得到了意想不到的结果。 我的代码如下:
#include <iostream>
using namespace std;
const int MAX = 4;
int main () {
const char *names[MAX] = { "Zara Ali", "Hina Ali", "Nuha Ali", "Sara Ali" };
for (int i = 0; i < MAX; i++) {
cout << "Value of names[" << i << "] = ";
cout << *(names + i) << endl;
}
return 0;
}
结果如下:
Value of names[0] = Zara Ali
Value of names[1] = Hina Ali
Value of names[2] = Nuha Ali
Value of names[3] = Sara Ali
但我希望得到:
Value of names[0] = Z
Value of names[1] = H
Value of names[2] = N
Value of names[3] = S
你能指导我那里发生了什么吗?
*(names+i)
的含义与names[i]
完全相同,这就是原因。例如,请参阅定义这种平等的在线C++标准草案:
5.2.1 下标
(1( ...表达式 E1[E2] 与 (根据定义(相同 *((E1(+(E2((
如果您希望打印每个字符串的第一个字符,则必须写入**(names+i)
或*(names[i])
或names[i][0]
。
相关文章:
- 尝试将字符串/字符转换为整数会产生意外结果
- RapidXML - 代码创建意外结果
- 类中静态函数C++意外结果
- 指针数组中的意外结果
- 使用指针访问数组元素时出现意外结果
- 使用 sprintf 和 %g 将双精度转换为字符串的意外结果
- C++:比较运算符>和字符串文本的意外结果
- 具有意外结果的 C++ 闭包
- yaml-cpp 比较的意外结果
- 每次都出现意外结果
- 在 Qt 中解析嵌套的 JSON 时出现意外结果(数组不存在)
- 如何避免 std::abs 的意外结果?
- 使用嵌套 if 语句的意外结果
- A ^= B ^= A ^= B;C# Visual Studio 中的意外结果
- 逻辑错误,我将获得意外结果
- 在 c++ 中使用异步的意外结果
- 从函数的返回值将元素C++存储到 std::vector 中时出现意外结果
- 执行递增和递减时"cout"链接会产生意外结果
- OpenCL - 内核方法返回意外结果
- C++使用 std::get_time 解析 YYMMDD ISO 8601 日期字符串会得到意外结果