【问题标题】:Result of subtracting indexes of an integer array [duplicate]减去整数数组的索引的结果[重复]
【发布时间】:2021-04-23 05:39:54
【问题描述】:

我目前正在学习 C++,我对这段代码感到困惑:

    int array[10];
    int* p1 = &array[3];
    int* p2 = &array[7];
    cout<<"p2-p1=" << p2 - p1 <<endl;

我认为结果会是 16,因为整数数组的一个元素是 4 字节大小,但编译器说 p2-p1=4。数组指针之间的减法是否忽略了字节的大小?

【问题讨论】:

  • 正确:指针算法使用底层类型的大小。使用指针算法来计算数组中 元素 的数量比计算字节数要有用得多。如果需要字节,您可以随时将指针转换为 const char*
  • 所有指针运算都是在“元素”而不是“字节”中完成的。
  • int* p1 = &amp;array[3]int* p1 = array + 3 相同。也许这样会更清楚。
  • 类型控制指针运算。所以int *p; 其中p + 1 是内存中的下一个int

标签: c++ arrays pointers


【解决方案1】:

它不会忽略字节的大小,但指针知道指向对象的大小。所以 4 字节如果它是一个整数,8 字节对于双精度,...。这甚至适用于您自己的结构的数组。我刚刚添加了一张图片,以可视化它的外观。

【讨论】:

  • (好图...)
  • 我不知道这是不是讽刺,但我只是用excel“画”了它:D
  • 不,其实我是很认真的,一张图真的值1000字。
  • 啊是的我知道,当我学习 C/C++ 和所有指针的东西时,我总是画出我刚刚写的东西来理解我的代码:D
猜你喜欢
  • 1970-01-01
  • 2018-12-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-26
相关资源
最近更新 更多