指针
/初探指针
1.内存
计算机中的最小单位是 bit位
最小的存储单位为byte 字节(一个字节=8位)
运行的软件,游戏,程序都是在内存中
一个正在运行的程序我们称之为进程
2.变量
2.1定义变量
类型名 变量名
2.2引用
使用变量名就是在使用变量名绑定的内存段
3.地址与首地址
地址:在计算机中每一个字节都有一个与之相匹配的编号
首地址:变量的第一个地址就是首地址
4.指针:首地址就是指针
在内存中我们的地址是连续的,所以意味着知道了变量的首地址和类型,就可以确定对应内存的值,所以我们把首地址称之为指针.
5.指针变量
如果我们再次的开辟内存,用来保存指针,我们就把这个开辟的内存绑定的变量称之为指针变量.
6.指针大小
操作系统和编译器 操作系统决定上线
编译器决定了你当前所用的环境
32个0 最大32个1 0-32个1
64个0 最大64个1 0-64个1
编译器环境有关: 4字节32(x86) 8字节64位(x64)
printf("int *=%d\n",sizeof(int *));
7.解引用
知道变量名p,就知道p绑定的内存段中保存的地址&x,就能够去操作&x指向的内存段
int x =10086;
int *p=&x; //这里的*号和int组成的意思是: 一个int类型的指针,而名字为p
*p=100; //这里的*号则为解引用,利用名字p去操作关于p所表达的内存段中
//保存的地址&x所指向的内存段
printf("%d\n",x);
8.野指针
指针指向未知的内存段,我们把这样的指针称之为野指针.
int *p=10086;
*p=100; //2.因为没有修改的权利
printf("%d",*p); //3.若强行运行,输出结果空白
//1.ctrl+f5运行失败....这是野指针
9.空指针
int *p=NULL;NULL/0/空
//空指针的作用主要是:程序员代码敲得多,可能导致某指针不经意间废了,导致内存泄漏
int x=10086;
int *p=NULL;
p=&x;
if(NULL!=p)
{
*p=100;
}
else
{
printf("这是一个空指针!\n");
return 0;
}
printf("%d\n",*p);
10.万能指针
void* 定义的指针变量,就是我们常说的所谓的万能指针
11.多级指针
int x=10086;
int *p=&x; //p是x变量的首地址
//*p表示x变量对应的值
int **p1=&p; //p1是p指针的首地址
//*p1是x变量的首地址
//**p表示x变量对应的值
int ***p2=&p1; //p2是p1指针的首地址
//*p2是p指针的首地址
//**p2是x变量的首地址
//***p2表示x变量对应的值
printf("x=%d\n",x);
printf("&x=%d\n",&x);
printf("p=%d\n",p);
printf("*p=%d\n",*p);
printf("p1=%d\n",p1);
printf("*p1=%d\n",*p1);
printf("**p1=%d\n",*p1);
printf("p2=%d\n",p2);
printf("*p2=%d\n",*p2);
printf("**p2=%d\n",**p2);
printf("***p2=%d\n",***p2);