【发布时间】:2022-01-06 01:57:58
【问题描述】:
我不明白为什么 var 来了 6,它是如何计算的
#include <iostream>
using namespace std;
int main()
{
char *A[] = { "abyx", "dbta", "cccc"};
int var = *(A+1) - *A+1;
cout << "1: " << (*(A+1)) << "\n";
cout << "2: " << (*A+1) << "\n";
cout << "char: " << var << "\n";
cout << &A[0][1] - &A[1][0] << std::endl;
}
【问题讨论】:
-
这两个项目不是
*(A+1)和*A+1- 这两个项目是*(A+1)和*A,所以差异是5(不是6),因为每个字符串中有5 个字符(不要忘记每个字符串末尾的 '\0'。 -
好问题。对此的全面分析并非易事——您也处于未定义行为的边缘。我无法回答,因为我整晚都和可怜的孩子一起熬夜!
-
数组元素之间的距离是
&A[1] - &A[0]或等价的A + 1 - A,这显然是1。你减去的是数组元素的值,而不是它们的位置。 (如果你改用int的数组,问题可能会变得更清楚。)
标签: c++ pointers pointer-arithmetic chararray