1 *p表示p保存的地址编号对应的空间内容,指针变量p的解引用。
2 打印出来的p为保存num的地址10287708,打印出来的*p为保存num地址对应的空间内容100。
3 指针变量的跨度
指针变量的取值宽度由指针类型长度决定,如char*p,p+1会跳过一个字节。int*p,则跳过四个字节。
int main()
{
int num = 0x01020304;
//一个字节=8bit位=8个二进制位=2个16进制位 int类型4个字节=8个16进制位
char* p1;
//一个字节
short* p2;
//两个字节
int* p3;
p1 = #
p2 = #
p3 = #
printf("%#x\n", *p1);
// 0x04 系统随机将指针定位再首位或末尾但输出按照顺序,输出不会显示符号位(0x4)
printf("%#x\n", *p1+1);
//0x05 输出 *p1为p1保存的地址所对应的空间内容0x04然后加上数字1输出
printf("%#x\n", *(p1+1));
//0x03 p1为char类型变量,p1保存的地址指向4这个点,
//p1+1保存的地址表示这个点移动一个字节指向3,*(p1+1)则取出3这个点的一个字节
printf("%#x\n", *p2);//0x0304
printf("%#x\n", *p2+1);//0x0305
printf("%#x\n", *(p2+1));//0x0102
printf("%#x\n", *p3);//0x01020304
printf("%#x\n", *p3+1);//0x01020305
printf("%#x\n", *(p3+1));//p3+1的地址未知,越界
return 0;
}
4 强制类型转换
如果指针操作的跨度和宽度啊不等时,则需要使用类型转换,优先选择最小的宽度/跨度定义指针变量。如定义char*p p=&num,想要输出的内容包含0x03.0x02,则需要强转*(short*)(p+1)。其中,p+1表示为指向0x03的空间地址,(short*)(p+1)则为表示强制转换成short类型,最后加上*表示取出(*) 强制转换(short*) 的p+1指向的空间地址保存的内容(0x03,0x02)。
5指针变量初始化
&和*同时存在可以相互抵消,*(p)等效[ p ] 。
局部指针变量可以加一个const修饰
int**p 的p的类型为 int**,*p的表达式类型为int***。
&p 其中求的p实际为**p的地址
6 void注意事项
7 学习路线