C++多维数组逗号索引地址
C++ Multi-dimensional Array Comma Index Address
在玩多维数组时,我发现如果我使用逗号来分隔索引,它会返回数组中元素的地址,而不考虑第一个逗号。以下示例对此进行了说明:
int arr[3][3];
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
// Output arr[,] test
cout << "arr[" << i << "," << j << "]: " << arr[i,j] << endl;
}
}
cout << "n--------------n" << endl;
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
// Output arr[][] test
cout << "arr[" << i << "][" << j << "]: " << &arr[i][j] << endl;
}
}
这给出了输出:
arr[0,0]: 0x28feec
arr[0,1]: 0x28fef8
arr[0,2]: 0x28ff04
arr[1,0]: 0x28feec
arr[1,1]: 0x28fef8
arr[1,2]: 0x28ff04
arr[2,0]: 0x28feec
arr[2,1]: 0x28fef8
arr[2,2]: 0x28ff04
--------------
arr[0][0]: 0x28feec
arr[0][1]: 0x28fef0
arr[0][2]: 0x28fef4
arr[1][0]: 0x28fef8
arr[1][1]: 0x28fefc
arr[1][2]: 0x28ff00
arr[2][0]: 0x28ff04
arr[2][1]: 0x28ff08
arr[2][2]: 0x28ff0c
如您所见,[0,0]
/[0][0]
、[0,1]
/[1][0]
和[0,2]
/[2][0]
处的地址值匹配。它们还会匹配[n,n]
对中第二个数字与[n][n]
对中的第一个数字匹配的地方。
我发现这篇关于逗号运算符的维基百科文章C++同意这种跳过:
在 Pascal 中,多维数组使用逗号进行索引,例如
A[i, j]
.然而,在C中,A[i, j]
等价于A[j]
,因为i
的值被丢弃。在 C 中索引多维数组的正确方法是使用A[i][j]
这样的结构。
我唯一的问题是:为什么它会返回一个地址?维基百科的文章似乎不同意它应该返回一个地址,因为它说它"等同于A[j]
"。
当你对多维数组进行寻址时,用逗号分隔的索引arr[i,j]
,逗号的行为类似于逗号运算符。
逗号运算符是一个二元运算符,它计算所有逗号分隔的表达式,完成其副作用,并将其丢弃,直到列表中的最后一个表达式。如此有效地,它忽略了您特定情况下的最后一个索引之外的所有索引,即j
arr[j]
.
由于arr[j]
的类型只不过是int arr[3],它衰减为指针int *
,因此打印指针的值会显示地址。
为了对此进行扩展,ostream 算子 没有可以接受类型
Ty[]
的重载,最接近 它接受是Ty*
,ostream& operator<< (void* val);
因此,这实际上意味着,
Ty[]
衰减到Ty*
然后向下转换为void *
并调用ostream& operator<< (void* val)
,用于打印指针的地址
维基百科文章似乎不同意它应该返回 地址,因为它说它"等同于 A[j]"。我会非常 非常感谢对此的回答。
为了简单起见,您希望程序在以下情况下打印什么?
int arr[3];
std::cout << arr << std::endl;
- 将数组的地址分配给变量并删除
- 数组索引的值没有增加
- 空基优化子对象的地址
- C++ 指针的内存地址和指向数组的内存地址如何相同?
- 芬威克树(BIT).找到具有给定累积频率的最小索引,单位为 O(logN)
- 在C++中打印指向不同基元数据类型的指针的内存地址
- 查找最接近的大于当前数字的数字的索引
- 如何在c++程序中找到函数的地址
- 在C++中调整向量中的索引
- 向量元素的引用地址与它所指向的向量元素的地址不同.为什么
- 被解释为低级别const的const对象的地址
- 重载元组索引运算符-C++
- 将地址分配给本地指针后,公共对象的变量将消失
- 从指针数组中的地址索引
- C++多维数组逗号索引地址
- 如何通过地址获取元组中元素的索引
- 从成员的地址获取成员的索引
- 获取给定地址的std::vector元素的索引
- 获取虚成员函数的真实地址(或vTable中的索引)
- 查找数组中给定索引的第一个和最后一个字节的地址