コードは次のとおりです。
#include<stdio.h>
main()
{
char arr[]={'a','b','c','d'};
char *i,*j,*k;
i=&arr[1];
j=&arr[2];
k=&arr[3];
printf("%s %p %p %p %s\n",(j-i)'i,j,k,(k-i));
}
これをコンパイルしようとすると、表示されるエラーは、%s が (char *) を期待しているが、(つまり (ji)) が int であるということです。しかし、j&i を char ポインターとして定義したと思います。
%s の代わりに %d を使用すると、(ji) の答えは 1 になり、(ki) は 2 になり、実際には要素の違いになります。
上記のように %p を使用して i、j、k のアドレスを出力すると、正しいアドレスが表示されますが、なぜ 2 つのアドレスを差し引いてバイト数の差を与えることができないのでしょうか?
あなたの視点を教えてください?
編集:ポインター差分に関する質問の2番目の部分のコードを追加:
#include<stdio.h>
main()
{
int arr[]={10,20,34,65};
int *i,*j,*k;
i=&arr[1];
j=&arr[2];
k=&arr[3];
printf("%d %p %p %p %d\n",(j-i),i,j,k,(k-i));
}