当一个指针到特定类型的(比如int,char,float,..)被递增,其值增加该数据类型的大小.如果void指向大小数据的指针x递增,它如何获得指向x前面的字节?编译器如何知道添加x指针的值?
我正在阅读Pointer Arithmetic中的一些内容,我遇到了两件我无法理解的事情,也不知道它的用途
address_expression - address_expression
Run Code Online (Sandbox Code Playgroud)
并且
address_expression > address_expression
Run Code Online (Sandbox Code Playgroud)
有人可以向我解释一下,它们是如何工作的以及何时使用它们.
编辑:
我想说的是,如果我只取两个地址并减去它们,它们会产生什么
如果我拿两个地址并比较它们的结果或基于的比较
编辑:我现在明白了减去地址的结果,但比较地址我仍然没有得到它.
我理解1 <2,但是地址如何比另一个更大,他们在比较什么
我在书面测试中问了这个问题.在我的lapi上运行下面的代码时,我得到10作为输出
#include<stdio.h>
int main()
{
int *i, *j;/* two pointer variable*/
i = (int *)60;
j = (int *)20;
printf("%d \n",i-j);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出:
10
Run Code Online (Sandbox Code Playgroud)
任何人都可以告诉我为什么输出10.
我试图找到两个变量之间的内存距离.具体来说,我需要找到char []数组和int之间的距离.
char data[5];
int a = 0;
printf("%p\n%p\n", &data[5], &a);
long int distance = &a - &data[5];
printf("%ld\n", distance);
Run Code Online (Sandbox Code Playgroud)
当我在没有最后两行的情况下运行我的程序时,我得到了两个变量的正确内存地址,如下所示:
0x7fff5661aac7
0x7fff5661aacc
Run Code Online (Sandbox Code Playgroud)
现在我明白了,如果我没错,两者之间有5个字节的距离(0x7fff5661aac8,0x7fff5661aac9,0x7fff5661aaca,0x7fff5661aacb,0x7fff5661aacc).
为什么我不能减去类型(int*)和类型(char*)之一的指针.两者都是指内存地址..我该怎么做才能计算两者之间的距离,以字节为单位?我尝试了两个指针中的一个,但它没有用.
我得到:" 错误:'char*'和'int*'不是兼容类型的指针 ".谢谢大家都会帮助我
int main(void){
int arr[] = {1, 2, 3, 4, 5, 6};
printf("%p\t%p\t%d\n",arr,arr+1,(arr+1)-arr);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出:
0x7ffe583f4ba0 0x7ffe583f4ba4 1
Run Code Online (Sandbox Code Playgroud)
为什么差异1?不应该是4.