【问题标题】:Value difference between two pointers is not making sense [duplicate]两个指针之间的值差异没有意义[重复]
【发布时间】:2014-09-22 16:07:44
【问题描述】:

我没有得到输出。为什么会这样?

#include <stdio.h>
int main(void){
    int a[3][3];
    int *p, *q;
    p=a[0];
    q=a[1];
    printf("%d\n",sizeof(int));
    printf("%d\n",q-p);

    printf("%d %d\n",q,p);
    return 0;
}

输出

4
3
2686728 2686716

我认为(q-p) 应该是12!我的数学有问题吗?!

【问题讨论】:

  • 启用编译器警告,您将 ints 分配给指针并对 2 个不相关的指针进行(整数)算术运算。此外,您的数组未初始化,因此 a[0]a[1] 具有未指定的值。
  • 根据指针算法这是正确的。检查Differencing,即两个指针相减。
  • @Ani 想解释一下为什么?
  • 它显示了基本类型(int)的单位差异。
  • @juanchopanza:为什么q-p 应该是12

标签: c pointer-arithmetic


【解决方案1】:

我认为 (q-p) 应该是 12

没有。 (q-p)==3 应该成立,因为它们的类型为 int*。同时,q == p + 3.
这也是真的:(char*)q - (char*)p == 12

【讨论】:

    【解决方案2】:

    你得到的输出值为3,因为两个指针都指向整数数据类型,它们之间的区别是三个对象。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-11
      相关资源
      最近更新 更多