对int *a=(int*)3的理解

想请问一下大家这两个程序是怎么进行赋值和运行的,为什么结果相差这么多


int *a=(int*)3;

对上面的这一步完全不理解

#include<stdio.h>
int main(void)
{
    int *a=(int*)3;
    printf("%d",a);    
    
    return 0;
}

这个的输出结果是3

#include<stdio.h>
int main(void)
{
    int *a=(int*)3;
    printf("%d",a+1);    
    
    return 0;
}

而这个的输出是7

  1. a是一个指针,指向了3这个地址,打印a的值实际上是打印的a指向的地址的值,所以是3;
  2. a被强制转换为int类型的指针,在32位系统上整型占4个字节,所以a+1,相当于增加了一个整型的长度,是4个字节,因此3+4=7。如果是在64位系统上,值应该是11。

第一个赋值语句是定义了一个指向整形的指针变量,他不能直接用数字来赋值,要用引用,他这里用了int*来赋值,其实也就表示将3赋值给了a。所以输出就是3,下面的a+1输出的应该是一个随机数,a+1表示他的地址加一,那个数字是随机的,不同的系统,电脑值都不一样