在这个程序中,假设数组从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);
}
答案 0 :(得分:9)
它实际上告诉你元素数量的差异。
数组的连续元素之间的差异总是1
通过它们之间的地址差异找到,您需要将difference
乘以sizeof
数据类型
要获得实际的地址差异,
int difference = sizeof(int) * (j - i)
答案 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();
}