3

在这个程序中,假设数组从 2000 开始,那么元素应该存在于内存位置 arr[1]=2004 和 arr[5]=2020。如果是这样,那么 (ji) 应该给出 16,即 j 和 i 的内存位置之间的差异。但是它给出了 ji 的值“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);
} 
4

2 回答 2

9

它实际上是在告诉您元素数量的差异。

数组的连续元素之间的区别总是通过地址来查找它们之间的1区别,你需要乘以数据类型differencesizeof

要获得实际的地址差异,

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

详细解释可以在这里找到

于 2013-02-23T05:44:26.580 回答
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();

}

于 2013-02-23T08:03:10.037 回答