【发布时间】:2020-12-19 16:02:24
【问题描述】:
谁能帮我解决这个问题。 我认为指针是一个保存变量地址的对象。所以当我减去一个指向指针的指针时。它得到这个结果。
int a = 2;
int b = 7;
int* c = &a;
int* d = &b;
int e = c - d; // = 3
int array[] = { 1, 2, 6, 4, 7, 8, 5, 3 };
int* f = &array[0];
int* g = &array[8];
int h = g - f; // = 8
【问题讨论】:
-
不清楚你在问什么。你做了一个观察,但你没有问一个问题。结果有什么让你吃惊的地方?您的预期是什么,这与您观察到的有何不同?
-
请注意,
int e = c - d;是不允许的。您只能减去指向同一数组中元素的指针。 -
我想知道这是怎么发生的。 @FrançoisAndrieux 我跑了,它奏效了。
-
这是未定义的行为。这意味着编译器不需要产生错误,任何事情都可能发生。当我尝试时,我得到
e == -1;。任何结果都是可能的,包括崩溃或根本没有结果。对于h,结果始终为 8,因为这是减去array中元素索引的结果。 -
注意
&array[8]是否允许是一个灰色区域,因为最后一个元素是array[7]但是你可以得到一个指向one-past-the-end的指针,只要它没有被评估。
标签: c++ arrays pointers subtraction