指针值的差异

Difference of Pointer Values

我是一名新手程序员,我一直在参考各种建议,以便为 DSA 打下坚实的基础。以下是我的代码

int main() {

    int AnArray[20];
    int* plocation6, * plocation0;
    plocation6 = &AnArray[6];
    plocation0 = &AnArray[0];
    cout << (int)plocation6 << endl << (int)plocation0<<endl;
    cout << "Difference   " << plocation6 - plocation0;
    

}

而且我预计 Difference 的值将是 24,因为在十六进制中指针位置相差 18,在十进制中相差 24 但答案是 6,就好像我使用 (int) 和然后进行操作然后我得到 24 作为答案,这是为什么?请解释为什么 6 来了??

两个指针之间的区别不在于字节,而在于元素的数量。所以你看到字节数 (24) 除以 sizeof(int) (4).

please expalin why 6 comes??

索引 0 处的元素和索引 6 处的元素相隔 6 个索引。当您从一个指针中减去另一个指针时,这就是 6 的来源。

在以前的答案的基础上构建:

这是真的,因为一个 int 占用 4 个字节,所以两个指针相隔 24 个字节。

你得到 6 的原因是因为 - 运算符(对于指针)被定义为两个指针地址之间的差异除以指针指向的数据类型的大小。

这是一个类似于运算符重载的概念,运算符重载定义为执行不同于典型操作的操作。
注意:我不认为这在技术上是运算符重载,但理解运算符重载将有助于理解这个概念。