#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
浙公网安备 33010602011771号