C程序阵列位置

时间:2013-03-18 18:45:40

标签: c

为什么以下C程序会返回(a+4)中的4个和(a+1)中的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]’)

3 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:0)

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

在错误上,我相信C不会让你添加两个内存地址作为安全措施。正如我在之前的评论中指出的那样,完全没有意义。但是,从某个地址中减去一个内存地址会在某些情况下为您提供一些有用的东西(内存中两个位置之间的偏移量)。

答案 2 :(得分:-1)

您遇到语法错误。 你使用a作为单个intiger,但a的数据类型是整数数组。 所以一个例如减法是:a [1] [3] -a [0] [3],这里的值等于3.

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