代码是:
#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 指针,那么 (ji) 如何成为整数。
如果我使用 %d 而不是 %s,则 (ji) 的答案为 1,而 (ki) 的答案为 2,这实际上是元素差异。这是如何发生的。
当我使用 %p 打印上面的 i,j,k 的地址时,它会执行正确的地址,但是为什么不能减去 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));
}