任何的数据类型咱们均可以把它当成个模子,而后可成各类类型的数据;ide
任何模子都又其特定的大小。测试
int *p;指针
用sizeof测试下,sizeof(p) 或者sizeof(int)是4byte,因而能够这样定义:内存
一个int类型的模子在内存上刻出大小为4字节的空间,而后把4个字节大小空间命名为p。同时限定这4字节连续空间只能存储某个内存地址,即便你存入别的任何数据,都将被当作地址处理,并且这个内存地址开始的连续4字节上只能存储某个int数据。编译器
咱们把p称为指针变量,p里存储的内存地址处的内存称为p指向的内存。it
int *p = NULL and *p = NULL编译
第一个是初始化。初始的是什么呢,就是将p自己的地址初始为0.class
*p = NULL是将p指向的内容初始为0.变量
double *p = NULL;
printf("%d\n",sizeof(p)); //始终是4byte,指针变量自己的空间
int *pt = NULL;
printf("%ox\n",pt); //经过编译器查看pt的值为ox
int i = 10;
int *pp = &i;
printf("%d\n",i);
*pp = NULL;
printf("%d",i); //最后i的值变为0数据类型
再看:
int *p;
*p = NULL;
定义了一个指针变量p,可是p自己的地址鲜为人知,也许就是非法的,做用后续的也可能会报错。
改进:
int i = 20;
int *p = &i;
*p = NULL;
将数值存储到指定的内存地址:
假设将数值0x100存储到地址为0x12ff7c上,那么这个地址能够这样得来,:我能够随意定义个变量,好比int i;而后取地址,那么这个地址确定是能够访问的。
int *p = (int *)0x12ff7c;
*p = 0x100;
也能够这样:*((int *)0x12ff7c) = 0x100;