首页 > 解决方案 > 谁能告诉这个问题打印的是什么?

问题描述

#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;
}

什么是 (names + i) 在上面的代码中打印

什么是 char *names

标签: c++arrayspointers

解决方案


names是一个const char *指针数组,它们被初始化为指向内存中的字符串文字(与显示的代码无关)。

当一个数组仅由其名称引用时,它会衰减为指向第一个元素的指针。然后循环使用指针算法来增加该指针以访问每个后续元素。因此,表达式names + i实际上与 相同&names[i],因此循环打印出数组中每个元素的内存地址,例如:

Value of names[0] = 0x7ffedc2f1850
Value of names[1] = 0x7ffedc2f1858
Value of names[2] = 0x7ffedc2f1860
Value of names[3] = 0x7ffedc2f1868

在线演示

如果使用了代码*(names + i),那么它将取消引用这些地址,从而打印出const char*数组中的每个指针。operator<<被重载以const char*作为空终止字符串处理,因此将打印字符串文字的内容而不是它们的地址,例如:

Value of names[0] = Zara Ali
Value of names[1] = Hina Ali
Value of names[2] = Nuha Ali
Value of names[3] = Sara Ali

在线演示


推荐阅读