阵列存储位置

时间:2013-02-23 05:40:12

标签: c++ c arrays

在这个程序中,假设数组从2000开始,那么元素应该存在于内存位置arr [1] = 2004和arr [5] = 2020。如果是这样的话,那么(j-i)应该给出16,即j和i的存储位置之间的差异。但它给j-i的值'4'。为什么它没有给出值16?

main() 
{
 int arr[]={10,20,30,45,67,56,74};
 int *i,*j; 
 i=&arr[1] ;
 j=&arr[5] ;
 printf ("%d %d",j-i,*j-*i);
} 

3 个答案:

答案 0 :(得分:9)

它实际上告诉你元素数量的差异。

数组的连续元素之间的差异总是1通过它们之间的地址差异找到,您需要将difference乘以sizeof数据类型

要获得实际的地址差异,

int difference =  sizeof(int) * (j - i)

详细说明可以找到Here

答案 1 :(得分:2)

当然是由于指针算法

我建议你阅读这篇文章 Pointer Arithmetic

答案 2 :(得分:0)

可能会帮助你,

  #include<stdio.h>
  #include<conio.h>
   #include<iostream.h>
   void main ()
      {
        clrscr();
      int arr[4];
     for(int p=1; p<=4; p++)
   {
    cout<<"enter elements"<<endl;
    cin>>arr[p];
           }
    int i,j,k;
 i=arr[2];
j=arr[4];
  k=arr[2]-arr[4];

cout<<k;
  getch();

}