c++ - 谁能告诉这个问题打印的是什么?
问题描述
#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
解决方案
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
推荐阅读
- excel - 使用 Excel VBA 更改图表中源数据的工作表名称
- arrays - Array.Max 打印包含最大值的整个数组(C#)
- javascript - 如何在触发之前更改页面下方的内联脚本标记
- sql - 如何加入多值列?
- r - R - 如何在数据框变量名称中包含符号/方程式?
- java - CipherOutputStream 和 ZipOutputStream
- javascript - JSON树存储格式
- python - Pandas - 从字典和数组创建 xlsx
- windows - 无法在 Windows 上启动 Confluent Kafka Connect (NoClassDefFoundError: io/confluent/connect/storage/StorageSinkConnectorConfig)
- java - java.sql.SQLException:字段 foreign_key 没有默认值