声明后,未进行任何操作:
[cpp]
int *p;
printf("&p = %x,p = %x, *p = %d\n", &p, p, *p);
// &p = 0022ff44,p = 768d9e34, *p = -7494423
//此时,p是一个野指针,其值是系统任意赋的。p和*p都是没有实际意义的。
指针赋值为空:
[cpp]
p = (int *)NULL; //NULL的值为0
printf("&p = %x,p = %x\n", &p, p);
// &p = 22ff44,p = 0 , *p没有意义
这里,因为系统分配给每个程序一定的内存空间,程序不可访问未分配给自己的内存。
P指向一个有意义的数值:
[cpp]
int a = 2;
p = &a;
*p = NULL;
printf("p = %x,&a = %x, *p = %d, a = %d\n", p, &a, *p, a);
// p = 0022ff40, &a = 0022ff40, *p = 0, a = 0
*p = 8;
printf("p = %x,&a = %x, *p = %d, a = %d\n", p, &a, *p, a);
// p = 0022ff40, &a = 0022ff40, *p = 8, a = 8
将数据存储到指定的内存地址(略显暴力):
[cpp]
<span style="white-space:pre"> </span>//int a = 1;
//printf("&a = %x\n", &a);
p = (int *)0x22ff40; //p指向地址 0x22ff40
*((int *)2293568) = 10; //在该内存上填值
printf("p = %x, *P = %d\n", p, *p);
// p = 22ff40, *p = 10
这里先打印出a的地址,为0x22ff40,表明这个地址可用,再赋值给指针p。