1

为什么下面的 C 程序返回 4(a+4)和 1的减法(a+1)

     #include<stdio.h>
     int main()
     {

      int a[3][2]={1,2,
                   5,7,
                   6,8};

      printf("\n%d",(a+4)-(a+1));
      return 0;}

此外,当我用加法 (a+4)+(a+1) 替换减法运算符时,它给出

error: invalid operands to binary + (have ‘int (*)[2]’ and ‘int (*)[2]’)
4

3 回答 3

3

请注意,这a是一个数组,当单独使用时会降级为指针(即内存地址)。这意味着(a+4)(a+1)也是内存地址。减去内存地址是有意义的,因为您正在计算两个地址之间的距离。但是,添加内存地址是无稽之谈。

我不确定你想在这里做什么,所以我无法提出解决问题的解决方案。请随时编辑您的问题并提供更多详细信息,以便我们为您提供进一步帮助。

于 2013-03-18T18:51:40.090 回答
0

我运行了您的代码并得到了 3 作为差异,这是有道理的:a + 4 - (a + 1) = 3。

关于错误,我相信 C 不允许您添加两个内存地址作为保护措施。正如我在之前的评论中指出的那样,这样做完全是荒谬的。然而,从另一个内存地址中减去一个内存地址在某些情况下会为您提供一些有用的信息(内存中两个位置之间的偏移量)。

于 2013-03-18T18:54:33.780 回答
-1

你有一个语法错误。您使用 a 作为单个整数,但 a 的数据类型是整数数组。因此,例如减法将是:a[1][3]-a[0][3],此处的值等于 3。

(对于您的信息,该数组实际上看起来像 a={1,2,5 7,6,8} 它有 3 行和 2 列。

于 2013-03-18T19:09:25.920 回答