指针

初探指针

1.内存

​ 计算机中的最小单位是什么???
​ bit位
​ 最小的存储单位才是 byte 字节
​ 1字节=8位
​ 运行的软件 游戏 程序 都是在内存中
​ 一个正在运行的程序我们称之为进程.

2.变量

2.1 定义变量

​ 类型名 变量名;

int x;//定义变量 就会给这个变量分配空间 字节
x = 10086; //转换成二进制是什么样的

char 祖国; 定义变量 也是一个变量 只不过比较特殊

int x = 10086; //整形变量:存储一个整数的变量
&x 他是一个x变量的首地址,指针!!!

char data = 50;//这个data理解为整形变量呢

int pp = &x;//p就是指针变量了呢

2.2 引用

​ 使用变量名就是在使用变量名绑定的内存段.

3.地址与首地址

​ 地址:在计算机中每一个字节都有一个与之相匹配的编号我们把它称之为地址.
​ 首地址:变量的第一个地址就是首地址

4.指针:首地址就是指针.

​ 在内存中我们的地址是连续的,所以意味着知道了变量的首地址,知道了变量的类型,就可以确定变量对应内存的段的值,所以我们把首地址称之为指针.

5.指针变量

​ 如果我们再次的开辟内存,用来保存指针,我们就把这个开辟的内存绑定的变量称之为指针变量.

char 祖国; 定义变量 也是一个变量 只不过比较特殊

int x = 10086; //整形变量:存储一个整数的变量
//&x 他是一个x变量的首地址,指针!!!

char data = 50;//这个data理解为整形变量呢???

int pp = &x;//p就是指针变量了呢???

//指针类型 再普通类型的后面加了一个*
int* p; //p就是一个指针类型的变量
char* p1;
float* p2;
double* p3;
xxx* 
//printf("int=%d\n", sizeof(int));
//printf("char=%d\n", sizeof(char));
//printf("float=%d\n", sizeof(float));
//printf("double=%d\n", sizeof(double));

//操作系统和编译器    操作系统决定上线
//编译器决定了你当前所用的环境
//32个0  最大32个1	0-32个1
//64个0  最大64个1	0-64个1
//编译器环境有关:4字节32 8字节64
printf("int*=%d\n", sizeof(int*));
printf("char*=%d\n", sizeof(char*));
printf("float*=%d\n", sizeof(float*));
printf("double*=%d\n", sizeof(double*));

//p p1 p2 p3
//printf("p=%d\n",  sizeof(p));
//printf("p1=%d\n", sizeof(p1));
//printf("p2=%d\n", sizeof(p2));
//printf("p3=%d\n", sizeof(p3));

6.指针大小

​ 操作系统和编译器 操作系统决定上线
​ 编译器决定了你当前所用的环境
​ 32个0 最大32个1 0-32个1
​ 64个0 最大64个1 0-64个1
​ 编译器环境有关:4字节32 8字节64

7.解引用

​ 知道变量名p,就知道p绑定的内存段中保存的地址&x,就能够去操作&x指向的内存段.
​ int x = 10086;
​ int* p = &x;
​ *p=100;
​ printf("%d\n",x);

8.野指针

​ 指针指向未知的内存段,我们把这样的指针称之为野指针.

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* 定义的指针变量,就是我们常说的所谓的万能指针.

void*p 万能指针不需要指定指针,

11.多级指针

最多最多我们只会用到二级指针.
int x = 10086;
int* p = &x; //p是x变量的首地址

int** q = &p;	//q表示的是p指针的首地址

int*** q1 = &q; //q1 q的首地址 
				//*q1 p的指针及p的首地址
				//**q1 x这个变量的首地址
				//***q1 表示的就是x对应的值
				//*q表示的是指针p里面的内容,就是x变量的首地址
				//**q表示的才是x里面的内容

printf("q=%#X\n", q);
printf("&p=%#X\n", &p);
printf("------------------------------\n");
printf("*q=%#X\n", *q);
printf("&x=%#X\n", &x);
printf("p=%#X\n", p);
printf("------------------------------\n");
printf("**q=%d\n", **q);
printf("X=%d\n", x);
printf("*p=%d\n", *p);
posted @ 2020-10-22 20:36  fahaxikia  阅读(36)  评论(0)    收藏  举报