整数指针分配毛刺,同时将整数转换为指针

时间:2016-03-29 02:42:40

标签: c pointers

#include <stdio.h>
int main (void) {

    int *a = (int *) 60;
    int *b = (int *) 40;
    printf("%lu\n", (a-b));
    printf("Integer Size = %lu\n", sizeof (int));
    printf("Pointer Size = %lu\n\n", sizeof (int *));

    char *c = (char *) 60;
    char *d = (char *) 40;
    printf("%lu\n", (c-d));
    printf("Character Size = %lu\n", sizeof (char));
    printf("Pointer   Size = %lu\n", sizeof (char *));

    return 0;
}

输出:

5
Integer Size = 4
Pointer Size = 8

20
Character Size = 1
Pointer   Size = 8

请解释输出。我无法理解的是 int * a =(int *)60; 是什么?

1 个答案:

答案 0 :(得分:3)

int *a = (int *)60;

声明a是一个指向整数的指针,并将其设置为内存位置60。

int *b = (int *)40;

声明b是一个指向整数的指针,并将其设置为内存位置40。

当您对指针执行算术运算时,算术以整数指向的数据类型的大小为单位进行。所以

a - b

根据它们之间的整数计算ab之间的差异。由于整数的大小为4个字节,并且地址之间的差异为20个字节,因此结果为20/4 = 5

在第二个代码块中,由于它使用char而不是int,因此指针指向1字节数据,因此减去指针与减去它们的地址相同。

一般来说,如果你有两个指针

T *a;
T *b;

其中T是任何类型,然后

a - b

相当于:

((char *)a - (char *)b)/sizeof(T)