首先先明确不同类型的指针有什么区别:
对于不同类型的指针:
- 所占的内存空间大小是相同的,不会因为指向内容有差别。指针本质为一个地址,只与cpu、操作系统和编译器位数有关。
- 区别在与指向地址空间不同,空间大小与指针类型有关。
通过程序来检验冉类型的指针与指向空间的差别
#include <stdio.h> int main(){ int a[] = {0x11223344,0x55667788}; int* q = a; char* p = (char*)a; printf("&a=%p\n",a); printf("sizeof(char*)=%ld,sizeof(int*)=%ld\n",sizeof(char*),sizeof(int*)); //查看不同类型指针内存大小 printf("sizeof(char)=%ld,sizeof(int)=%ld\n",sizeof(char),sizeof(int)); printf("int_p=%p,*int_p=0x%x\n",q,*q); printf("char_p=%p,*char_p=0x%x\n",p,*p); //查看不同类型指针指向的空间大小,以及空间内的值 printf("int_p=%p,*int_p=0x%x\n",(q+1),*(q+1)); printf("char_p=%p,*char_p=0x%x\n",(p+1),*(p+1)); //对指针进行运算,查看区别return 0; }
运行结果为:
&a=0x7ffe51241e00 //数组a的首地址 sizeof(char*)=8,sizeof(int*)=8 //不同类型指针内存大小相同 sizeof(char)=1,sizeof(int)=4 int_p=0x7ffe51241e00,*int_p=0x11223344 char_p=0x7ffe51241e00,*char_p=0x44 //不同类型指针指向的内存地址大小不同 int_p=0x7ffe51241e04,*int_p=0x55667788 char_p=0x7ffe51241e01,*char_p=0x33 //地址运算改变的值不同
通过绘制地址与存储内容的关系, 能够比较直观的知道不同类型指向内容的差别。
疑惑:
与上面相同的程序,当对char型指针p进行运算为p+4时
printf("char_p=%p,*char_p=0x%x\n",(p+4),*(p+4));
得到结果
不理解为何输出结果变为 0xffffff88。长时间的查找和尝试都没有理解原因,如果有知道的大佬,希望能说明一下,谢谢。
标签:指向,int,char,地址,printf,sizeof,指针 From: https://www.cnblogs.com/shi-zhai/p/17197635.html