1.指针所占的空间的大小:由指针本身决定,跟指针指向的对象的类型无关,一般是4个字节,也有可能是8个字节(64位的编译器),win32平台下,指针的空间大小4个字节
![f02e09a03dda581d7d13796b608b288a.png](https://img-blog.csdnimg.cn/img_convert/f02e09a03dda581d7d13796b608b288a.png)
2.指针的偏移是由定义指针时指针指向的对象的类型决定,而不是实际上指向的对象的类型决定,一般情况下,定义是指针指向的对象的类型跟实际上指针指向的对象的类型保持一致
#include <stdio.h>
int main()
{
int b = 109;
// b 是空间,b的类型 int
//&b : 表示b空间的首地址,&b --->指针--->数据类型 *
//&b : int *
int* p = &b; //定义指针指向的对象的类型 int
//实际上指向的对象的类型 int
char *pf =(char *)&b; //定义指针指向的对象的类型 char
//实际上指向的对象的类型 int
//指针+整数: 表示指针的偏移,偏移的字节数
//偏移的字节数,由定义是指针指向的对象的类型决定
printf("%#pn",p);
printf("%#pn",pf);
printf("%#pn",&b);
printf("%#pn",p+1);
printf("%#pn",pf+1);
printf("%#pn",&b+1);
unsigned int a = 0XAABBCCDD; //交换高八位低八位
unsigned char *pt = &a;
unsigned char tmp;
tmp = *pt;
*pt = *(pt+3);
*(pt+3) = tmp;
printf("%#Xn",a);
}
int main()
{
int b = 123456789;
char *pm = (char *)&b;
int *ph = &b;
short *pk = &b;
//pm = pm+1; //
//*pm = *pm+1;
pk = pk +1; //偏移2个字节
*pk = *pk + 2;
//char [-128,127]
//printf("%dn",*pm); // 读取pm所指向的空间的内容 206-256=-50
printf("%dn",*pk);
printf("%dn",*ph); // 读取ph所指向的空间的内容 123457045
printf("%dn",b); //b 的值 123457045
}
微信:xydf321456
QQ:754634522