如何解决指针值的差异
我是一名新手程序员,我正在与指针混合以增强我的 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)。
请解释为什么 6 来了??
索引为 0 的元素和索引为 6 的元素相隔 6 个索引。这就是当你从另一个中减去一个指针时 6 的来源。
,建立在之前的答案之上:
确实如此,因为 int
需要 4 个字节,所以两个指针相距 24 个字节。
您得到 6 的原因是因为 -
运算符(用于指针)被定义为两个指针地址之间的差异除以指针指向的数据类型的大小。
这是一个类似于运算符重载的概念,其中运算符被定义为执行典型操作以外的其他操作。
注意:我不认为这在技术上是运算符重载,但理解运算符重载将有助于理解这个概念。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。