前言
回炉重造~
提示:以下是本篇文章正文内容,下面案例可供参考
一、基本概念
1.虚拟内存
先来讲讲什么是虚拟内存
虚拟内存是在进程创建的时候操作系统分配给进程的,与物理内存之间存在映射关系
同时,操作系统会对虚拟内存分区,对于C语言而言,分区如下:
- 堆 : 动态申请的内存
- 栈:存放局部变量
- 静态全局区:分为初始化过的和未初始化过的
- 代码区:存放程序代码
- 文字常量区:存放常量
2.什么是指针
什么是指针: 指针就是地址
指针变量: 是一个变量,用来存放一个地址编号,任何类型的指针变量都是4个字节
对应类型的指针变量只能存放对应类型的变量地址(如整型只能存整型,有几个字节就有几个地址编号)
&
取地址
*
取值(在定义指针的时候起标识作用,在其他情况下都表示为 取值) *+指针变量
,相当于指针指向的变量
3.指针的分类
指针的分类:根据指针指向的类型作分类(字符指针,整型指针,函数指针,结构体指针,指针的指针,数组指针…)
二、基本用法
1.指针与数组元素
指针++ : 指向下一个对应类型的数据
字符指针++,指针存放的地址编号+1
整型指针++,指针存放的地址编号+4
int b[10];
int* ptr;
//只要将数组名赋值给同类型的指针变量,此时指针变量和数组名可以以同样的方式操作数组
ptr = b;
ptr[2] = 100;
*(ptr + 2) = 100;
printf("b[2] = %d \n", b[2]);
2.指针运算
//指针的运算
int c[4] = {1,2,3,4};
int *ptr3,*ptr4;
ptr3 = c;
ptr4 = &c[2];
//ptr3 += 2;
printf("c[2] = %d %d \n", ptr3,c); //二者差8个字节
printf("%d\n", ptr4 - ptr3); //相同类型的指针可以作减法
printf("%d", *ptr4);
3.注意事项
- 指针变量只能保存已经开辟好空间的地址,它不能自己开辟地址,也就是不能随意保存一个地址变量
- 类型不同的指针变量需要强制类型转换
*+指针
取值能取几个字节是由指针类型决定的,字符指针 能取一个字节,整型指针能取4个字节,double指针能取8个字节
总结
未完待续…