#include <stdio.h>
#include <stdlib.h>
int main()
{
    printf("char* size is %d\n",sizeof(char *));
    printf("int* size is %d\n",sizeof(int *));
    return 0;
}

 内存大小都一样

#include <stdio.h>
#include <stdlib.h>
int main()
{
    char *p = (char*)malloc(sizeof(char));
    *p = 'A';
    int *q = p;
    printf("p is %d q is %d\n",p,q);
    printf("*p is %c *q is %d\n",*p,*q);
    free(p);
    return 0;
}

 

 p,q指向一个地址,*p 是以char解析的,而*q是以int解析的

#include <stdio.h>
#include <stdlib.h>
int main()
{
    char *p = (char*)malloc(4*sizeof(char));
    for(int i = 0;i < 4;i++)
        *(p+i) = 1;
    int *q = p;
    printf("p is %d q is %d\n",p,q);
    for(int i = 0;i < 4;i++)
        printf("p+%d is %d *(p+%d) is %d\n",i,p+i,i,*(p+i));
    printf("q is %d *q is %d\n",q,*q);
    printf("q+1 is %d *(q+1) is %d\n",q+1);
    free(p);
    return 0;
}

 可以发现 malloc申请的地址是连续的 指针位移也是连续的,只不过char* 移动一个字节 int*移动四个字节 在这里就是对应的 sizeof(char) sizeof(int)

char规定1个字节 int根据机器设备会不同 在内存中 q是连续为4个char 每个char存的都是1 二进制就是 00000001000000010000000100000001 最后转换为十进制就是16843009

posted on 2021-12-30 20:18  Rabbit_XIN  阅读(219)  评论(0)    收藏  举报