地址相减在C语言中是合法的,但有一些限制条件。 相减的两个地址必须指向同一块内存区域(通常是同一个数组或连续分配的内存块)中的元素。 这两个地址必须是相同类型的指针,或者至少是指向相同大小数据类型的指针。 C语言中地址相减的示例代码: c #include <stdio.h> int main() { int arr[5] = {...
【C语言】两个指针(地址)相减 两个指针相减,为两个指针之间间隔这两个指针类型的数目。 如:int *p,*q; p-q=(p地址-q地址)/sizeof(int) #include <stdio.h>intmain() {inta[9]={1,2,3,4,5,6,7,8,9};char*p,*q;int*p2,*q2; p=(char*)a; q=(char*)&a[2]; printf("p=%08X q=%...
00416B92 mov dword ptr [nTmp],eax 原来,执行完数组地址相减运算后,还会执行算数右移指令,右移位数视参数类型而定,如int型右移2位,short型右移1位。都知道右移1位相当于除以2操作,右移2位等同于除以4。 由此可见,两个数组元素地址相减,实际是获取两个元素数组元素的距离,而不是地址的距离。如果要计算地址...
C语言中两个地址相减指的是两个地址间数组元素的个数,而不是间隔的字节数。比如 int a[10],*p;p=a;a[1]-a[0] 值为1,而不是4 p+4 指的是p指针所指单元的后面第4个元素,即a[4],而不是a[1]。
地址相减,是两个无符号整型数相减,输出 可以 用 16 进制或 10 进制。例如:unsigned mag_buf[4];mag_buf[2]=0x02b02c60;//地址1 mag_buf[1]=0x02b01650;//地址2 printf("%u %x\n",mag_buf[2]-mag_buf[1],mag_buf[2]-mag_buf[1]);10 进制 5648 16 进制 1610 ...
这是两个 int* 相减,按指针运算规则,结果要除以 int 大小,即 4 字节 希望输出 -16 的话,可以先转 char* 再相减,因为 char 是1 字节,也可以转为整型 size_t 或unsigned long long(32 位是 unsigned int)再相减 printf("%d\n",(char*)&p[4][2]-(char*)&a[4][2]); printf("%d\n",(size_...
【1】变量地址相减,是地址相减得到的字节数,再除以字宽。不同类型的变量,地址不能相减,相同类型变量...
指针是有类型的,两个同类型指针做减法,结果是这种类型的无素的个数,而不是单纯的地址之差。
p 指向了A[0],那么*p就和A[0]是同一个东西。当P++的时候,P向后移动了一格,也就是和A[1]一样了 也就是说这是用指针遍历数组的方式,和你在循环里把P换成int i=0,i<12I++ 然后用A[i]是一样的
是C语言吗?如果两个地址在同一个数组中,可以相减,结果可存入int型中 否则,结果未定义